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 527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// corresponding LocalFrame in blink. 537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// 547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Oilpan: the middle objects + Page in the above diagram are Oilpan heap allocated, 557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// WebView and FrameView are currently not. In terms of ownership and control, the 567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// relationships stays the same, but the references from the off-heap WebView to the 577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// on-heap Page is handled by a Persistent<>, not a RefPtr<>. Similarly, the mutual 587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// strong references between the on-heap LocalFrame and the off-heap FrameView 597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// is through a RefPtr (from LocalFrame to FrameView), and a Persistent refers 607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// to the LocalFrame in the other direction. 617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// 627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// From the embedder's point of view, the use of Oilpan brings no changes. close() 637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// must still be used to signal that the embedder is through with the WebFrame. 647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// Calling it will bring about the release and finalization of the frame object, 657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// and everything underneath. 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// How frames are destroyed 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// ------------------------ 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// The main frame is never destroyed and is re-used. The FrameLoader is re-used 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// and a reference to the main frame is kept by the Page. 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// When frame content is replaced, all subframes are destroyed. This happens 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// in FrameLoader::detachFromParent for each subframe in a pre-order depth-first 7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// traversal. Note that child node order may not match DOM node order! 7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// detachFromParent() calls FrameLoaderClient::detachedFromParent(), which calls 7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// WebFrame::frameDetached(). This triggers WebFrame to clear its reference to 78d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// LocalFrame, and also notifies the embedder via WebFrameClient that the frame is 7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// detached. Most embedders will invoke close() on the WebFrame at this point, 8009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// triggering its deletion unless something else is still retaining a reference. 811e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)// 827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci// The client is expected to be set whenever the WebLocalFrameImpl is attached to 831e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)// the DOM. 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 86f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebLocalFrameImpl.h" 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 88197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/DOMWrapperWorld.h" 89197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionState.h" 90197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ExceptionStatePlaceholder.h" 91197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptController.h" 92197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptSourceCode.h" 93197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptValue.h" 947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "bindings/core/v8/V8Binding.h" 95197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8GCController.h" 96197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/V8PerIsolateData.h" 9776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "core/HTMLNames.h" 9853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Document.h" 9953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/IconURL.h" 10053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/MessagePort.h" 10153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Node.h" 10253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/NodeTraversal.h" 103e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles)#include "core/dom/shadow/ShadowRoot.h" 10453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/Editor.h" 10553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/FrameSelection.h" 1063c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "core/editing/InputMethodController.h" 107f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "core/editing/PlainTextRange.h" 1081e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/editing/SpellChecker.h" 10953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/TextAffinity.h" 11053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/TextIterator.h" 11153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/htmlediting.h" 11253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/editing/markup.h" 1137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/fetch/ResourceFetcher.h" 1141e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/frame/Console.h" 11576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "core/frame/LocalDOMWindow.h" 1165d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/frame/FrameHost.h" 117bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "core/frame/FrameView.h" 11810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "core/frame/Settings.h" 119197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/html/HTMLAnchorElement.h" 12053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLCollection.h" 12153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLFormElement.h" 12243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)#include "core/html/HTMLFrameElementBase.h" 12353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLFrameOwnerElement.h" 12453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLHeadElement.h" 12553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLInputElement.h" 12653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLLinkElement.h" 12753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/PluginDocument.h" 128e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "core/inspector/ConsoleMessage.h" 12953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/InspectorController.h" 13053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/inspector/ScriptCallStack.h" 13153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/DocumentLoader.h" 13253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoadRequest.h" 13353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoader.h" 13409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/loader/HistoryItem.h" 13553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/SubstituteData.h" 13653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Chrome.h" 13753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/EventHandler.h" 13853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FocusController.h" 13953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FrameTree.h" 14053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h" 14153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/PrintContext.h" 14253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/HitTestResult.h" 14353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderBox.h" 14453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderFrame.h" 14553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderLayer.h" 14653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderObject.h" 14753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderTreeAsText.h" 14853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderView.h" 14953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/style/StyleInheritedData.h" 1501e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/timing/Performance.h" 151f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#include "modules/geolocation/GeolocationController.h" 1526f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch#include "modules/notifications/NotificationController.h" 153197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "modules/notifications/NotificationPermissionClient.h" 1545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "modules/screen_orientation/ScreenOrientationController.h" 1551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/TraceEvent.h" 1561e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/UserGestureIndicator.h" 1571e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/clipboard/ClipboardUtilities.h" 158a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/fonts/FontCache.h" 159a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsContext.h" 160a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsLayerClient.h" 161a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/skia/SkiaUtils.h" 162a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch#include "platform/heap/Handle.h" 163bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "platform/network/ResourceRequest.h" 1641e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/scroll/ScrollTypes.h" 16510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include "platform/scroll/ScrollbarTheme.h" 16651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/KURL.h" 16751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/SchemeRegistry.h" 16851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/SecurityPolicy.h" 169e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/Platform.h" 170e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebFloatPoint.h" 171e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebFloatRect.h" 17209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebLayer.h" 173e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebPoint.h" 174e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebRect.h" 175e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebSize.h" 176e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebURLError.h" 177e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "public/platform/WebVector.h" 178f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebConsoleMessage.h" 179f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDOMEvent.h" 180f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebDocument.h" 181f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebFindOptions.h" 182f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebFormElement.h" 183f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebFrameClient.h" 184f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebHistoryItem.h" 185f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebIconURL.h" 186f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebInputElement.h" 187f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebNode.h" 188f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPerformance.h" 189f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPlugin.h" 190f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPrintParams.h" 191f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebRange.h" 192f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebScriptSource.h" 193f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebSecurityOrigin.h" 194f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebSerializedScriptValue.h" 195f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/AssociatedURLLoader.h" 196f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/CompositionUnderlineVectorBuilder.h" 197f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/FindInPageCoordinates.h" 198f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)#include "web/GeolocationClientProxy.h" 1995d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "web/LocalFileSystemClient.h" 2005d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "web/MIDIClientProxy.h" 201197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "web/NotificationPermissionClientImpl.h" 202f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/PageOverlay.h" 203f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/SharedWorkerRepositoryClientImpl.h" 204f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/TextFinder.h" 205f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebDataSourceImpl.h" 206f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebDevToolsAgentPrivate.h" 207f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPluginContainerImpl.h" 208f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebViewImpl.h" 209e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/CurrentTime.h" 210e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/HashMap.h" 21110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch#include <algorithm> 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 21351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static int frameCount = 0; 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Key for a StatsCounter tracking how many WebFrames are active. 218f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)static const char webFrameActiveCount[] = "WebFrameActiveCount"; 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 220d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)static void frameContentAsPlainText(size_t maxChars, LocalFrame* frame, StringBuilder& output) 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Document* document = frame->document(); 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!document) 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame->view()) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Select the document body. 230a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<Range> range(document->createRange()); 23151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) TrackExceptionState exceptionState; 23251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) range->selectNodeContents(document->body(), exceptionState); 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 23451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!exceptionState.hadException()) { 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The text iterator will walk nodes giving us text. This is similar to 23653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) // the plainText() function in core/editing/TextIterator.h, but we implement the maximum 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // size and also copy the results directly into a wstring, avoiding the 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // string conversion. 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (TextIterator it(range.get()); !it.atEnd(); it.advance()) { 2407757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch it.appendTextToStringBuilder(output, 0, maxChars - output.length()); 2417757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch if (output.length() >= maxChars) 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; // Filled up the buffer. 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The separator between frames when the frames are converted to plain text. 2477757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch const LChar frameSeparator[] = { '\n', '\n' }; 2487757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch const size_t frameSeparatorLength = WTF_ARRAY_LENGTH(frameSeparator); 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Recursively walk the children. 251f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) const FrameTree& frameTree = frame->tree(); 2525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) for (Frame* curChild = frameTree.firstChild(); curChild; curChild = curChild->tree().nextSibling()) { 2535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!curChild->isLocalFrame()) 2545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) continue; 2555d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) LocalFrame* curLocalChild = toLocalFrame(curChild); 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Ignore the text of non-visible frames. 2575d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RenderView* contentRenderer = curLocalChild->contentRenderer(); 2585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) RenderPart* ownerRenderer = curLocalChild->ownerRenderer(); 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!contentRenderer || !contentRenderer->width() || !contentRenderer->height() 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || (contentRenderer->x() + contentRenderer->width() <= 0) || (contentRenderer->y() + contentRenderer->height() <= 0) 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || (ownerRenderer && ownerRenderer->style() && ownerRenderer->style()->visibility() != VISIBLE)) { 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) continue; 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make sure the frame separator won't fill up the buffer, and give up if 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // it will. The danger is if the separator will make the buffer longer than 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // maxChars. This will cause the computation above: 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // maxChars - output->size() 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // to be a negative number which will crash when the subframe is added. 2707757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch if (output.length() >= maxChars - frameSeparatorLength) 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2737757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch output.append(frameSeparator, frameSeparatorLength); 2745d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) frameContentAsPlainText(maxChars, curLocalChild, output); 2757757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch if (output.length() >= maxChars) 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; // Filled up the buffer. 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 28010f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebPluginContainerImpl* WebLocalFrameImpl::pluginContainerFromFrame(LocalFrame* frame) 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame) 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame->document() || !frame->document()->isPluginDocument()) 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2868abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) PluginDocument* pluginDocument = toPluginDocument(frame->document()); 28709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return toWebPluginContainerImpl(pluginDocument->pluginWidget()); 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 290e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebPluginContainerImpl* WebLocalFrameImpl::pluginContainerFromNode(LocalFrame* frame, const WebNode& node) 2915267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){ 2925267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame); 2935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (pluginContainer) 2945267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return pluginContainer; 29509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return toWebPluginContainerImpl(node.pluginContainer()); 2965267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} 2975267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Simple class to override some of PrintContext behavior. Some of the methods 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// made virtual so that they can be overridden by ChromePluginPrintContext. 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ChromePrintContext : public PrintContext { 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_NONCOPYABLE(ChromePrintContext); 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 303d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ChromePrintContext(LocalFrame* frame) 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : PrintContext(frame) 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_printedPageWidth(0) 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~ChromePrintContext() { } 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void begin(float width, float height) 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_printedPageWidth); 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printedPageWidth = width; 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PrintContext::begin(m_printedPageWidth, height); 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual float getPageShrink(int pageNumber) const 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect pageRect = m_pageRects[pageNumber]; 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_printedPageWidth / pageRect.width(); 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 324e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) float spoolSinglePage(GraphicsContext& graphicsContext, int pageNumber) 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 326018c2aa55614eda57c6617f8d0747eacefc389a3Ben Murdoch // FIXME: Why is it ok to proceed without all the null checks that 327018c2aa55614eda57c6617f8d0747eacefc389a3Ben Murdoch // spoolAllPagesWithBoundaries does? 328e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) frame()->view()->updateLayoutAndStyleForPainting(); 329e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return spoolPage(graphicsContext, pageNumber); 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void spoolAllPagesWithBoundaries(GraphicsContext& graphicsContext, const FloatSize& pageSizeInPixels) 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 334018c2aa55614eda57c6617f8d0747eacefc389a3Ben Murdoch if (!frame()->document() || !frame()->view() || !frame()->document()->renderView()) 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 337e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) frame()->view()->updateLayoutAndStyleForPainting(); 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float pageHeight; 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) computePageRects(FloatRect(FloatPoint(0, 0), pageSizeInPixels), 0, 0, 1, pageHeight); 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const float pageWidth = pageSizeInPixels.width(); 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size_t numPages = pageRects().size(); 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int totalHeight = numPages * (pageSizeInPixels.height() + 1) - 1; 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Fill the whole background by white. 3475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) graphicsContext.setFillColor(Color::white); 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.fillRect(FloatRect(0, 0, pageWidth, totalHeight)); 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int currentHeight = 0; 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t pageIndex = 0; pageIndex < numPages; pageIndex++) { 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Draw a line for a page boundary if this isn't the first page. 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pageIndex > 0) { 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.save(); 3555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) graphicsContext.setStrokeColor(Color(0, 0, 255)); 3565267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) graphicsContext.setFillColor(Color(0, 0, 255)); 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.drawLine(IntPoint(0, currentHeight), IntPoint(pageWidth, currentHeight)); 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.restore(); 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.save(); 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.translate(0, currentHeight); 3648abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#if OS(WIN) || OS(MACOSX) 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Account for the disabling of scaling in spoolPage. In the context 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // of spoolAllPagesWithBoundaries the scale HAS NOT been pre-applied. 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float scale = getPageShrink(pageIndex); 3685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) graphicsContext.scale(scale, scale); 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) spoolPage(graphicsContext, pageIndex); 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) graphicsContext.restore(); 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) currentHeight += pageSizeInPixels.height() + 1; 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 377e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)protected: 378e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // Spools the printed page, a subrect of frame(). Skip the scale step. 379e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // NativeTheme doesn't play well with scaling. Scaling is done browser side 380e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // instead. Returns the scale to be applied. 381e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // On Linux, we don't have the problem with NativeTheme, hence we let WebKit 382e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // do the scaling and ignore the return value. 383e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual float spoolPage(GraphicsContext& context, int pageNumber) 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 385e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) IntRect pageRect = m_pageRects[pageNumber]; 386e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) float scale = m_printedPageWidth / pageRect.width(); 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 388e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) context.save(); 389e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#if OS(POSIX) && !OS(MACOSX) 390e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) context.scale(scale, scale); 391e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#endif 392e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) context.translate(static_cast<float>(-pageRect.x()), static_cast<float>(-pageRect.y())); 393e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) context.clip(pageRect); 394e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) frame()->view()->paintContents(&context, pageRect); 3957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci outputLinkAndLinkedDestinations(context, frame()->document(), pageRect); 396e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) context.restore(); 397e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return scale; 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Set when printing. 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float m_printedPageWidth; 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Simple class to override some of PrintContext behavior. This is used when 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// the frame hosts a plugin that supports custom printing. In this case, we 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// want to delegate all printing related calls to the plugin. 408197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass ChromePluginPrintContext FINAL : public ChromePrintContext { 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 410d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ChromePluginPrintContext(LocalFrame* frame, WebPluginContainerImpl* plugin, const WebPrintParams& printParams) 411e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) : ChromePrintContext(frame), m_plugin(plugin), m_printParams(printParams) 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~ChromePluginPrintContext() { } 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 417e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void begin(float width, float height) OVERRIDE 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 421e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void end() OVERRIDE 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_plugin->printEnd(); 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 426e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual float getPageShrink(int pageNumber) const OVERRIDE 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We don't shrink the page (maybe we should ask the widget ??) 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 1.0; 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 432e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void computePageRects(const FloatRect& printRect, float headerHeight, float footerHeight, float userScaleFactor, float& outPageHeight) OVERRIDE 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printParams.printContentArea = IntRect(printRect); 435e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) m_pageRects.fill(IntRect(printRect), m_plugin->printBegin(m_printParams)); 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 438e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual void computePageRectsWithPageSize(const FloatSize& pageSizeInPixels, bool allowHorizontalTiling) OVERRIDE 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 440e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) ASSERT_NOT_REACHED(); 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 443e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)protected: 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Spools the printed page, a subrect of frame(). Skip the scale step. 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // NativeTheme doesn't play well with scaling. Scaling is done browser side 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // instead. Returns the scale to be applied. 447e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) virtual float spoolPage(GraphicsContext& context, int pageNumber) OVERRIDE 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_plugin->printPage(pageNumber, &context); 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 1.0; 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Set when printing. 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginContainerImpl* m_plugin; 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPrintParams m_printParams; 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static WebDataSource* DataSourceForDocLoader(DocumentLoader* loader) 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return loader ? WebDataSourceImpl::fromDocumentLoader(loader) : 0; 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// WebFrame ------------------------------------------------------------------- 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int WebFrame::instanceCount() 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frameCount; 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4716f543c786fc42989f552b4daa774ca5ff32fa697Ben MurdochWebLocalFrame* WebLocalFrame::frameForCurrentContext() 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 473a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) v8::Handle<v8::Context> context = v8::Isolate::GetCurrent()->GetCurrentContext(); 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (context.IsEmpty()) 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frameForContext(context); 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4796f543c786fc42989f552b4daa774ca5ff32fa697Ben MurdochWebLocalFrame* WebLocalFrame::frameForContext(v8::Handle<v8::Context> context) 480e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 48110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return WebLocalFrameImpl::fromFrame(toFrameIfNotDetached(context)); 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4846f543c786fc42989f552b4daa774ca5ff32fa697Ben MurdochWebLocalFrame* WebLocalFrame::fromFrameOwnerElement(const WebElement& element) 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 486323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return WebLocalFrameImpl::fromFrameOwnerElement(PassRefPtrWillBeRawPtr<Element>(element).get()); 48710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 48810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 48910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isWebLocalFrame() const 49010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 49110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return true; 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 49410f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrame* WebLocalFrameImpl::toWebLocalFrame() 49510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 49610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return this; 49710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 49810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 49910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isWebRemoteFrame() const 50010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 50110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return false; 50210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 50310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 50410f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebRemoteFrame* WebLocalFrameImpl::toWebRemoteFrame() 50510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch{ 50610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch ASSERT_NOT_REACHED(); 50710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return 0; 50810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch} 50910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch 51010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::close() 5111e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 5121e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) m_client = 0; 5135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 5147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#if ENABLE(OILPAN) 5157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_selfKeepAlive.clear(); 5167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#else 5171e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) deref(); // Balances ref() acquired in WebFrame::create 5187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif 5191e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 5201e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 52110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::uniqueName() const 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 523f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return frame()->tree().uniqueName(); 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 52610f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::assignedName() const 5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 528f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return frame()->tree().name(); 5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 53110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setName(const WebString& name) 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 533f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->tree().setName(name); 5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 53610f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebVector<WebIconURL> WebLocalFrameImpl::iconURLs(int iconTypesMask) const 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The URL to the icon may be in the header. As such, only 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // ask the loader for the icon if it's finished loading. 540f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) if (frame()->loader().state() == FrameStateComplete) 54151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return frame()->document()->iconURLs(iconTypesMask); 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebVector<WebIconURL>(); 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 54510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setIsRemote(bool isRemote) 54609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 54709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_isRemote = isRemote; 54809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (isRemote) 54909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) client()->initializeChildFrame(frame()->view()->frameRect(), frame()->view()->visibleContentScaleFactor()); 55009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 55109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 55210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setRemoteWebLayer(WebLayer* webLayer) 55309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 55409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!frame()) 55509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 55609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 55709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) frame()->setRemotePlatformLayer(webLayer); 55809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 55909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 56010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setPermissionClient(WebPermissionClient* permissionClient) 56109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 56209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_permissionClient = permissionClient; 56309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 56409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 56510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setSharedWorkerRepositoryClient(WebSharedWorkerRepositoryClient* client) 56609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 56709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_sharedWorkerRepositoryClient = SharedWorkerRepositoryClientImpl::create(client); 56809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 56909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 57010f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebSize WebLocalFrameImpl::scrollOffset() const 5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameView* view = frameView(); 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!view) 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebSize(); 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return view->scrollOffset(); 5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 57810f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebSize WebLocalFrameImpl::minimumScrollOffset() const 5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameView* view = frameView(); 5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!view) 5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebSize(); 583926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return toIntSize(view->minimumScrollPosition()); 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 58610f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebSize WebLocalFrameImpl::maximumScrollOffset() const 5875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameView* view = frameView(); 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!view) 5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebSize(); 591926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return toIntSize(view->maximumScrollPosition()); 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 59410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setScrollOffset(const WebSize& offset) 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (FrameView* view = frameView()) 5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) view->setScrollOffset(IntPoint(offset.width, offset.height)); 5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 60010f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebSize WebLocalFrameImpl::contentsSize() const 6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (FrameView* view = frameView()) 6037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return view->contentsSize(); 6047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return WebSize(); 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 60710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::hasVisibleContent() const 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 609323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (RenderPart* renderer = frame()->ownerRenderer()) { 610323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (renderer->style()->visibility() != VISIBLE) 611323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return false; 612323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) } 6137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 6147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (FrameView* view = frameView()) 6157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return view->visibleWidth() > 0 && view->visibleHeight() > 0; 6167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return false; 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 61910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebRect WebLocalFrameImpl::visibleContentRect() const 620926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 6217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (FrameView* view = frameView()) 6227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return view->visibleContentRect(); 6237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return WebRect(); 624926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 625926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 62610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::hasHorizontalScrollbar() const 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frame() && frame()->view() && frame()->view()->horizontalScrollbar(); 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 63110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::hasVerticalScrollbar() const 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frame() && frame()->view() && frame()->view()->verticalScrollbar(); 6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 63610f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebView* WebLocalFrameImpl::view() const 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return viewImpl(); 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 64110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setOpener(WebFrame* opener) 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 643323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) // FIXME: Does this need to move up into WebFrame too? 644323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (WebFrame::opener() && !opener && m_client) 645d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_client->didDisownOpener(this); 646d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 647323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) WebFrame::setOpener(opener); 648d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 649d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ASSERT(m_frame); 650d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (m_frame && m_frame->document()) 651d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_frame->document()->initSecurityContext(); 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 65410f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebDocument WebLocalFrameImpl::document() const 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame() || !frame()->document()) 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebDocument(); 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebDocument(frame()->document()); 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 66110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebPerformance WebLocalFrameImpl::performance() const 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebPerformance(); 665d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return WebPerformance(&frame()->domWindow()->performance()); 6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 66810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::dispatchBeforeUnloadEvent() 66907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 67007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (!frame()) 67107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return true; 67207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return frame()->loader().shouldClose(); 67307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 67407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 67510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::dispatchUnloadEvent() 676aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{ 677aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch if (!frame()) 678aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch return; 679aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch frame()->loader().closeURL(); 680aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch} 681aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 68210f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochNPObject* WebLocalFrameImpl::windowObject() const 6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 686f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return frame()->script().windowScriptNPObject(); 6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 68910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::bindToWindowObject(const WebString& name, NPObject* object) 6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 691e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch bindToWindowObject(name, object, 0); 692e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 693e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 69410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::bindToWindowObject(const WebString& name, NPObject* object, void*) 695e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 696f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) if (!frame() || !frame()->script().canExecuteScripts(NotAboutToExecuteScript)) 6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 698f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->script().bindToWindowObject(frame(), String(name), object); 6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 70110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::executeScript(const WebScriptSource& source) 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TextPosition position(OrdinalNumber::fromOneBasedInt(source.startLine), OrdinalNumber::first()); 7055d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8::HandleScope handleScope(toIsolate(frame())); 706f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->script().executeScriptInMainWorld(ScriptSourceCode(source.code, source.url, position)); 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 70910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::executeScriptInIsolatedWorld(int worldID, const WebScriptSource* sourcesIn, unsigned numSources, int extensionGroup) 7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 712e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RELEASE_ASSERT(worldID > 0); 713e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RELEASE_ASSERT(worldID < EmbedderWorldIdLimit); 7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<ScriptSourceCode> sources; 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (unsigned i = 0; i < numSources; ++i) { 7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TextPosition position(OrdinalNumber::fromOneBasedInt(sourcesIn[i].startLine), OrdinalNumber::first()); 7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sources.append(ScriptSourceCode(sourcesIn[i].code, sourcesIn[i].url, position)); 7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7215d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8::HandleScope handleScope(toIsolate(frame())); 722f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->script().executeScriptInIsolatedWorld(worldID, sources, extensionGroup, 0); 7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 72510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setIsolatedWorldSecurityOrigin(int worldID, const WebSecurityOrigin& securityOrigin) 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOMWrapperWorld::setIsolatedWorldSecurityOrigin(worldID, securityOrigin.get()); 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 73110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setIsolatedWorldContentSecurityPolicy(int worldID, const WebString& policy) 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DOMWrapperWorld::setIsolatedWorldContentSecurityPolicy(worldID, policy); 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebLocalFrameImpl::setIsolatedWorldHumanReadableName(int worldID, const WebString& humanReadableName) 7387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 7397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(frame()); 7407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DOMWrapperWorld::setIsolatedWorldHumanReadableName(worldID, humanReadableName); 7417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 7427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 74310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::addMessageToConsole(const WebConsoleMessage& message) 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MessageLevel webCoreMessageLevel; 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (message.level) { 749926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) case WebConsoleMessage::LevelDebug: 750926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) webCoreMessageLevel = DebugMessageLevel; 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebConsoleMessage::LevelLog: 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webCoreMessageLevel = LogMessageLevel; 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebConsoleMessage::LevelWarning: 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webCoreMessageLevel = WarningMessageLevel; 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebConsoleMessage::LevelError: 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webCoreMessageLevel = ErrorMessageLevel; 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 766e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) frame()->document()->addConsoleMessage(ConsoleMessage::create(OtherMessageSource, webCoreMessageLevel, message.text)); 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 76910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::collectGarbage() 7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 77309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (!frame()->settings()->scriptEnabled()) 7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 77593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) V8GCController::collectGarbage(v8::Isolate::GetCurrent()); 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 77810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::checkIfRunInsecureContent(const WebURL& url) const 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 781197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return frame()->loader().mixedContentChecker()->canFrameInsecureContent(frame()->document()->securityOrigin(), url); 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 78410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochv8::Handle<v8::Value> WebLocalFrameImpl::executeScriptAndReturnValue(const WebScriptSource& source) 7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TextPosition position(OrdinalNumber::fromOneBasedInt(source.startLine), OrdinalNumber::first()); 7895d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return frame()->script().executeScriptInMainWorldAndReturnValue(ScriptSourceCode(source.code, source.url, position)); 7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 79210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::executeScriptInIsolatedWorld(int worldID, const WebScriptSource* sourcesIn, unsigned numSources, int extensionGroup, WebVector<v8::Local<v8::Value> >* results) 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 795e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RELEASE_ASSERT(worldID > 0); 796e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch RELEASE_ASSERT(worldID < EmbedderWorldIdLimit); 7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<ScriptSourceCode> sources; 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (unsigned i = 0; i < numSources; ++i) { 8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) TextPosition position(OrdinalNumber::fromOneBasedInt(sourcesIn[i].startLine), OrdinalNumber::first()); 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sources.append(ScriptSourceCode(sourcesIn[i].code, sourcesIn[i].url, position)); 8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (results) { 8065d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) Vector<v8::Local<v8::Value> > scriptResults; 807f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->script().executeScriptInIsolatedWorld(worldID, sources, extensionGroup, &scriptResults); 8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebVector<v8::Local<v8::Value> > v8Results(scriptResults.size()); 8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (unsigned i = 0; i < scriptResults.size(); i++) 8105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8Results[i] = v8::Local<v8::Value>::New(toIsolate(frame()), scriptResults[i]); 8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) results->swap(v8Results); 812f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) } else { 8135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8::HandleScope handleScope(toIsolate(frame())); 814f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->script().executeScriptInIsolatedWorld(worldID, sources, extensionGroup, 0); 815f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) } 8165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 81810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochv8::Handle<v8::Value> WebLocalFrameImpl::callFunctionEvenIfScriptDisabled(v8::Handle<v8::Function> function, v8::Handle<v8::Value> receiver, int argc, v8::Handle<v8::Value> argv[]) 8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 821f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return frame()->script().callFunction(function, receiver, argc, argv); 8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 82410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochv8::Local<v8::Context> WebLocalFrameImpl::mainWorldScriptContext() const 8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 826f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return toV8Context(frame(), DOMWrapperWorld::mainWorld()); 8275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 82910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::reload(bool ignoreCache) 8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 832f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->loader().reload(ignoreCache ? EndToEndReload : NormalReload); 8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 83510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::reloadWithOverrideURL(const WebURL& overrideUrl, bool ignoreCache) 8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 838f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->loader().reload(ignoreCache ? EndToEndReload : NormalReload, overrideUrl); 8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 84110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::loadRequest(const WebURLRequest& request) 8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!request.isNull()); 8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const ResourceRequest& resourceRequest = request.toResourceRequest(); 8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (resourceRequest.url().protocolIs("javascript")) { 8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) loadJavaScriptURL(resourceRequest.url()); 8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 852f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->loader().load(FrameLoadRequest(0, resourceRequest)); 8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 85510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::loadHistoryItem(const WebHistoryItem& item, WebHistoryLoadType loadType, WebURLRequest::CachePolicy cachePolicy) 856a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{ 857a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch ASSERT(frame()); 858a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtr<HistoryItem> historyItem = PassRefPtr<HistoryItem>(item); 859a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch ASSERT(historyItem); 860a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch frame()->loader().loadHistoryItem(historyItem.get(), static_cast<HistoryLoadType>(loadType), static_cast<ResourceRequestCachePolicy>(cachePolicy)); 861a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch} 862a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 86310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::loadData(const WebData& data, const WebString& mimeType, const WebString& textEncoding, const WebURL& baseURL, const WebURL& unreachableURL, bool replace) 8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If we are loading substitute data to replace an existing load, then 86810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // inherit all of the properties of that original request. This way, 86910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // reload will re-attempt the original request. It is essential that 8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // we only do this when there is an unreachableURL since a non-empty 8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // unreachableURL informs FrameLoader::reload to load unreachableURL 8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // instead of the currently loaded URL. 8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceRequest request; 87409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (replace && !unreachableURL.isEmpty() && frame()->loader().provisionalDocumentLoader()) 87509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) request = frame()->loader().provisionalDocumentLoader()->originalRequest(); 8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) request.setURL(baseURL); 8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 878e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch FrameLoadRequest frameRequest(0, request, SubstituteData(data, mimeType, textEncoding, unreachableURL)); 879926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT(frameRequest.substituteData().isValid()); 880fff8884795cb540f87cf6e6d67b629519b00eb8bBen Murdoch frameRequest.setLockBackForwardList(replace); 881f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->loader().load(frameRequest); 8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 88410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::loadHTMLString(const WebData& data, const WebURL& baseURL, const WebURL& unreachableURL, bool replace) 8855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) loadData(data, WebString::fromUTF8("text/html"), WebString::fromUTF8("UTF-8"), baseURL, unreachableURL, replace); 8885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 89010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::stopLoading() 8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 89410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // FIXME: Figure out what we should really do here. It seems like a bug 8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // that FrameLoader::stopLoading doesn't call stopAllLoaders. 896f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->loader().stopAllLoaders(); 8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 89910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebDataSource* WebLocalFrameImpl::provisionalDataSource() const 9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 9025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We regard the policy document loader as still provisional. 904f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) DocumentLoader* documentLoader = frame()->loader().provisionalDocumentLoader(); 9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!documentLoader) 906f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) documentLoader = frame()->loader().policyDocumentLoader(); 9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return DataSourceForDocLoader(documentLoader); 9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 91110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebDataSource* WebLocalFrameImpl::dataSource() const 9125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 914f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return DataSourceForDocLoader(frame()->loader().documentLoader()); 9155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 91710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::enableViewSourceMode(bool enable) 9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (frame()) 9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frame()->setInViewSourceMode(enable); 9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 92310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isViewSourceModeEnabled() const 9245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frame()->inViewSourceMode(); 9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 93010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setReferrerForRequest(WebURLRequest& request, const WebURL& referrerURL) 9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 93209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) String referrer = referrerURL.isEmpty() ? frame()->document()->outgoingReferrer() : String(referrerURL.spec().utf16()); 9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) referrer = SecurityPolicy::generateReferrerHeader(frame()->document()->referrerPolicy(), request.url(), referrer); 9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (referrer.isEmpty()) 9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 93609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) request.setHTTPReferrer(referrer, static_cast<WebReferrerPolicy>(frame()->document()->referrerPolicy())); 9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 93910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::dispatchWillSendRequest(WebURLRequest& request) 9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ResourceResponse response; 942f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) frame()->loader().client()->dispatchWillSendRequest(0, 0, request.toMutableResourceRequest(), response); 9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 94510f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebURLLoader* WebLocalFrameImpl::createAssociatedURLLoader(const WebURLLoaderOptions& options) 9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new AssociatedURLLoader(this, options); 9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 95010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochunsigned WebLocalFrameImpl::unloadListenerCount() const 9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9527757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return frame()->domWindow()->pendingUnloadEventListeners(); 9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 95510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::replaceSelection(const WebString& text) 9565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool selectReplacement = false; 9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool smartReplace = true; 959c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) frame()->editor().replaceSelectionWithText(text, selectReplacement, smartReplace); 9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 96210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::insertText(const WebString& text) 9635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9643c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch if (frame()->inputMethodController().hasComposition()) 9653c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch frame()->inputMethodController().confirmComposition(text); 9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 967c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) frame()->editor().insertText(text, 0); 9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 97010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setMarkedText(const WebString& text, unsigned location, unsigned length) 9715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Vector<CompositionUnderline> decorations; 9733c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch frame()->inputMethodController().setComposition(text, decorations, location, length); 9745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 97610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::unmarkText() 9775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9783c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch frame()->inputMethodController().cancelComposition(); 9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 98110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::hasMarkedText() const 9825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9833c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch return frame()->inputMethodController().hasComposition(); 9845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 98610f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebRange WebLocalFrameImpl::markedRange() const 9875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9883c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch return frame()->inputMethodController().compositionRange(); 9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 99110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::firstRectForCharacterRange(unsigned location, unsigned length, WebRect& rect) const 9925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if ((location + length < location) && (location + length)) 9945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) length = 0; 9955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 996f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) Element* editable = frame()->selection().rootEditableElementOrDocumentElement(); 997f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) ASSERT(editable); 998a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<Range> range = PlainTextRange(location, location + length).createRange(*editable); 9995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!range) 10005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1001c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) IntRect intRect = frame()->editor().firstRectForRange(range.get()); 10025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect = WebRect(intRect); 10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect = frame()->view()->contentsToWindow(rect); 10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 100710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochsize_t WebLocalFrameImpl::characterIndexForPoint(const WebPoint& webPoint) const 10085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 101006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) return kNotFound; 10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntPoint point = frame()->view()->windowToContents(webPoint); 1013197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch HitTestResult result = frame()->eventHandler().hitTestResultAtPoint(point, HitTestRequest::ReadOnly | HitTestRequest::Active); 1014a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<Range> range = frame()->rangeForPoint(result.roundedPointInInnerNodeFrame()); 10155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!range) 101606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) return kNotFound; 1017f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) Element* editable = frame()->selection().rootEditableElementOrDocumentElement(); 1018f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) ASSERT(editable); 1019f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) return PlainTextRange::create(*editable, *range.get()).start(); 10205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 102210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::executeCommand(const WebString& name, const WebNode& node) 10235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 10255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (name.length() <= 2) 10275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 10285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Since we don't have NSControl, we will convert the format of command 10305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // string and call the function on Editor directly. 10315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String command = name; 10325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make sure the first letter is upper case. 10345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) command.replace(0, 1, command.substring(0, 1).upper()); 10355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Remove the trailing ':' if existing. 10375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (command[command.length() - 1] == UChar(':')) 10385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) command = command.substring(0, command.length() - 1); 10395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebPluginContainerImpl* pluginContainer = pluginContainerFromNode(frame(), node); 104153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (pluginContainer && pluginContainer->executeEditCommand(name)) 104253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return true; 10435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1044197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return frame()->editor().executeCommand(command); 10455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 104710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::executeCommand(const WebString& name, const WebString& value, const WebNode& node) 10485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 10505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) WebPluginContainerImpl* pluginContainer = pluginContainerFromNode(frame(), node); 10525267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (pluginContainer && pluginContainer->executeEditCommand(name, value)) 10535267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) return true; 10545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1055197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return frame()->editor().executeCommand(name, value); 10565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 105810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isCommandEnabled(const WebString& name) const 10595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); 1061c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return frame()->editor().command(name).isEnabled(); 10625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 106410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::enableContinuousSpellChecking(bool enable) 10655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (enable == isContinuousSpellCheckingEnabled()) 10675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 10681e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) frame()->spellChecker().toggleContinuousSpellChecking(); 10695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 107110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isContinuousSpellCheckingEnabled() const 10725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10731e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return frame()->spellChecker().isContinuousSpellCheckingEnabled(); 10745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 107610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::requestTextChecking(const WebElement& webElement) 10775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webElement.isNull()) 10795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 10801e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) frame()->spellChecker().requestTextChecking(*webElement.constUnwrap<Element>()); 10815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 108310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::replaceMisspelledRange(const WebString& text) 10845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (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. 10865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pluginContainerFromFrame(frame())) 10875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1088197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch frame()->spellChecker().replaceMisspelledRange(text); 10895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 109110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::removeSpellingMarkers() 109253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 1093197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch frame()->spellChecker().removeSpellingMarkers(); 109453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 109553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 109610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::hasSelection() const 10975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame()); 10995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pluginContainer) 11005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return pluginContainer->plugin()->hasSelection(); 11015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // frame()->selection()->isNone() never returns true. 11038abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return frame()->selection().start() != frame()->selection().end(); 11045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 110610f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebRange WebLocalFrameImpl::selectionRange() const 11075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11088abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return frame()->selection().toNormalizedRange(); 11095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 111110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::selectionAsText() const 11125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame()); 11145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pluginContainer) 11155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return pluginContainer->plugin()->selectionAsText(); 11165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1117a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<Range> range = frame()->selection().toNormalizedRange(); 11185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!range) 11195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebString(); 11205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String text = range->text(); 11228abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#if OS(WIN) 11235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) replaceNewlinesWithWindowsStyleNewlines(text); 11245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 11255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) replaceNBSPWithSpace(text); 11265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return text; 11275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 112910f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::selectionAsMarkup() const 11305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginContainerImpl* pluginContainer = pluginContainerFromFrame(frame()); 11325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pluginContainer) 11335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return pluginContainer->plugin()->selectionAsMarkup(); 11345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1135a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch RefPtrWillBeRawPtr<Range> range = frame()->selection().toNormalizedRange(); 11365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!range) 11375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebString(); 11385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return createMarkup(range.get(), 0, AnnotateForInterchange, false, ResolveNonLocalURLs); 11405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 114210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::selectWordAroundPosition(LocalFrame* frame, VisiblePosition position) 11435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) VisibleSelection selection(position); 11455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) selection.expandUsingGranularity(WordGranularity); 11465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11471e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) TextGranularity granularity = selection.isRange() ? WordGranularity : CharacterGranularity; 11481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) frame->selection().setSelection(selection, granularity); 11495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 115110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::selectWordAroundCaret() 11525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 11538abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) FrameSelection& selection = frame()->selection(); 11548abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (selection.isNone() || selection.isRange()) 11555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 11568abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) selectWordAroundPosition(frame(), selection.selection().visibleStart()); 11575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 11585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 116010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::selectRange(const WebPoint& base, const WebPoint& extent) 11615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 116293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) moveRangeSelection(base, extent); 11635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 116510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::selectRange(const WebRange& webRange) 11665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1167a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (RefPtrWillBeRawPtr<Range> range = static_cast<PassRefPtrWillBeRawPtr<Range> >(webRange)) 1168e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) frame()->selection().setSelectedRange(range.get(), VP_DEFAULT_AFFINITY, FrameSelection::NonDirectional, NotUserTriggered); 11695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 11705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 117110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::moveRangeSelection(const WebPoint& base, const WebPoint& extent) 117293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 117393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) VisiblePosition basePosition = visiblePositionForWindowPoint(base); 117493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) VisiblePosition extentPosition = visiblePositionForWindowPoint(extent); 117593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) VisibleSelection newSelection = VisibleSelection(basePosition, extentPosition); 11761e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) frame()->selection().setSelection(newSelection, CharacterGranularity); 117793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)} 117893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 117910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::moveCaretSelection(const WebPoint& point) 118093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles){ 11818abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Element* editable = frame()->selection().rootEditableElement(); 1182926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!editable) 1183926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 1184926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 118593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) VisiblePosition position = visiblePositionForWindowPoint(point); 11861e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) frame()->selection().moveTo(position, UserTriggered); 1187926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1188926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 118910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::setEditableSelectionOffsets(int start, int end) 119007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 119107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return frame()->inputMethodController().setEditableSelectionOffsets(PlainTextRange(start, end)); 119207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 119307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 119410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::setCompositionFromExistingText(int compositionStart, int compositionEnd, const WebVector<WebCompositionUnderline>& underlines) 119507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 119607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (!frame()->editor().canEdit()) 119707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return false; 119807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 119907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch InputMethodController& inputMethodController = frame()->inputMethodController(); 120007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch inputMethodController.cancelComposition(); 120107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 120207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (compositionStart == compositionEnd) 120307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return true; 120407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 120507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch inputMethodController.setCompositionFromExistingText(CompositionUnderlineVectorBuilder(underlines), compositionStart, compositionEnd); 120607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 120707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return true; 120807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 120907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 121010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::extendSelectionAndDelete(int before, int after) 121107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 121207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (WebPlugin* plugin = focusedPluginIfInputMethodSupported()) { 121307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch plugin->extendSelectionAndDelete(before, after); 121407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return; 121507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch } 121607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch frame()->inputMethodController().extendSelectionAndDelete(before, after); 121707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 121807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 121910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setCaretVisible(bool visible) 1220e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles){ 12218abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) frame()->selection().setCaretVisible(visible); 1222e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)} 1223e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 122410f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochVisiblePosition WebLocalFrameImpl::visiblePositionForWindowPoint(const WebPoint& point) 12255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // FIXME(bokan): crbug.com/371902 - These scale/pinch transforms shouldn't 12275d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // be ad hoc and explicit. 12285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) PinchViewport& pinchViewport = frame()->page()->frameHost().pinchViewport(); 122993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) FloatPoint unscaledPoint(point); 123093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) unscaledPoint.scale(1 / view()->pageScaleFactor(), 1 / view()->pageScaleFactor()); 12315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) unscaledPoint.moveBy(pinchViewport.visibleRect().location()); 12325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1233197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch HitTestRequest request = HitTestRequest::Move | HitTestRequest::ReadOnly | HitTestRequest::Active | HitTestRequest::IgnoreClipping; 123493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) HitTestResult result(frame()->view()->windowToContents(roundedIntPoint(unscaledPoint))); 12355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frame()->document()->renderView()->layer()->hitTest(request, result); 12365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (Node* node = result.innerNode()) 12388abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return frame()->selection().selection().visiblePositionRespectingEditingBoundary(result.localPoint(), node); 12398abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return VisiblePosition(); 12405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 124210f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebPlugin* WebLocalFrameImpl::focusedPluginIfInputMethodSupported() 124307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 124410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebPluginContainerImpl* container = WebLocalFrameImpl::pluginContainerFromNode(frame(), WebNode(frame()->document()->focusedElement())); 124507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (container && container->supportsInputMethod()) 124607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return container->plugin(); 124707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return 0; 124807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 124907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 125010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint WebLocalFrameImpl::printBegin(const WebPrintParams& printParams, const WebNode& constrainToNode) 12515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!frame()->document()->isFrameSet()); 12535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginContainerImpl* pluginContainer = 0; 12545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (constrainToNode.isNull()) { 12555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If this is a plugin document, check if the plugin supports its own 12565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // printing. If it does, we will delegate all printing to that. 12575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) pluginContainer = pluginContainerFromFrame(frame()); 12585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 12595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We only support printing plugin nodes for now. 126009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) pluginContainer = toWebPluginContainerImpl(constrainToNode.pluginContainer()); 12615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 12625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pluginContainer && pluginContainer->supportsPaginatedPrint()) 1264197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch m_printContext = adoptPtrWillBeNoop(new ChromePluginPrintContext(frame(), pluginContainer, printParams)); 12655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 1266197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch m_printContext = adoptPtrWillBeNoop(new ChromePrintContext(frame())); 12675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FloatRect rect(0, 0, static_cast<float>(printParams.printContentArea.width), static_cast<float>(printParams.printContentArea.height)); 12695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printContext->begin(rect.width(), rect.height()); 12705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float pageHeight; 12715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We ignore the overlays calculation for now since they are generated in the 12725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // browser. pageHeight is actually an output parameter. 12735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printContext->computePageRects(rect, 0, 0, 1.0, pageHeight); 12745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1275e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return static_cast<int>(m_printContext->pageCount()); 12765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 127810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochfloat WebLocalFrameImpl::getPrintPageShrink(int page) 12795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_printContext && page >= 0); 12815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_printContext->getPageShrink(page); 12825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 128410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochfloat WebLocalFrameImpl::printPage(int page, WebCanvas* canvas) 12855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(PRINTING) 12875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_printContext && page >= 0 && frame() && frame()->document()); 12885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 128953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) GraphicsContext graphicsContext(canvas); 129053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) graphicsContext.setPrinting(true); 1291e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return m_printContext->spoolSinglePage(graphicsContext, page); 12925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#else 12935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 12945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 12955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 129710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::printEnd() 12985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_printContext); 13005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printContext->end(); 13015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printContext.clear(); 13025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 130410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isPrintScalingDisabledForPlugin(const WebNode& node) 13055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 130609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WebPluginContainerImpl* pluginContainer = node.isNull() ? pluginContainerFromFrame(frame()) : toWebPluginContainerImpl(node.pluginContainer()); 13075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!pluginContainer || !pluginContainer->supportsPaginatedPrint()) 13095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 13105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return pluginContainer->isPrintScalingDisabled(); 13125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1314c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)int WebLocalFrameImpl::getPrintCopiesForPlugin(const WebNode& node) 1315c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles){ 1316c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) WebPluginContainerImpl* pluginContainer = node.isNull() ? pluginContainerFromFrame(frame()) : toWebPluginContainerImpl(node.pluginContainer()); 1317c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 1318c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (!pluginContainer || !pluginContainer->supportsPaginatedPrint()) 1319c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return 1; 1320c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 1321c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return pluginContainer->getCopiesToPrint(); 1322c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} 1323c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) 132410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::hasCustomPageSizeStyle(int pageIndex) 13255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frame()->document()->styleForPage(pageIndex)->pageSizeType() != PAGE_SIZE_AUTO; 13275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 132910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::isPageBoxVisible(int pageIndex) 13305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return frame()->document()->isPageBoxVisible(pageIndex); 13325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 133410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::pageSizeAndMarginsInPixels(int pageIndex, WebSize& pageSize, int& marginTop, int& marginRight, int& marginBottom, int& marginLeft) 13355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntSize size = pageSize; 13375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frame()->document()->pageSizeAndMarginsInPixels(pageIndex, size, marginTop, marginRight, marginBottom, marginLeft); 13385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) pageSize = size; 13395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 134110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::pageProperty(const WebString& propertyName, int pageIndex) 13425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_printContext); 13445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_printContext->pageProperty(frame(), propertyName.utf8().data(), pageIndex); 13455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 134710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::find(int identifier, const WebString& searchText, const WebFindOptions& options, bool wrapWithinFrame, WebRect* selectionRect) 13485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 134907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return ensureTextFinder().find(identifier, searchText, options, wrapWithinFrame, selectionRect); 13505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 135210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::stopFinding(bool clearSelection) 13535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 135407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder) { 135507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (!clearSelection) 135607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch setFindEndstateFocusAndSelection(); 135707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder->stopFindingAndClearSelection(); 13585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 13595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 136110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::scopeStringMatches(int identifier, const WebString& searchText, const WebFindOptions& options, bool reset) 13625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 136307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ensureTextFinder().scopeStringMatches(identifier, searchText, options, reset); 13645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 136610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::cancelPendingScopingEffort() 13675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 136807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder) 136907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder->cancelPendingScopingEffort(); 13705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 137210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::increaseMatchCount(int count, int identifier) 13735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This function should only be called on the mainframe. 13755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!parent()); 1376f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ensureTextFinder().increaseMatchCount(identifier, count); 13775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 137910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::resetMatchCount() 13805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1381f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ensureTextFinder().resetMatchCount(); 13825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 138410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::dispatchMessageEventWithOriginCheck(const WebSecurityOrigin& intendedTargetOrigin, const WebDOMEvent& event) 13855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!event.isNull()); 1387d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frame()->domWindow()->dispatchMessageEventWithOriginCheck(intendedTargetOrigin.get(), event, nullptr); 13885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 139010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint WebLocalFrameImpl::findMatchMarkersVersion() const 13915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!parent()); 13935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 139407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder) 139507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return m_textFinder->findMatchMarkersVersion(); 139607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return 0; 13975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 139910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochint WebLocalFrameImpl::selectNearestFindMatch(const WebFloatPoint& point, WebRect* selectionRect) 14005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 140107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(!parent()); 1402f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return ensureTextFinder().selectNearestFindMatch(point, selectionRect); 14035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 140510f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebFloatRect WebLocalFrameImpl::activeFindMatchRect() 14065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!parent()); 14085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 140907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder) 141007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return m_textFinder->activeFindMatchRect(); 141107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return WebFloatRect(); 14125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 141410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::findMatchRects(WebVector<WebFloatRect>& outputRects) 14155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!parent()); 1417f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ensureTextFinder().findMatchRects(outputRects); 14185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 142010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setTickmarks(const WebVector<WebRect>& tickmarks) 142143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles){ 142243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (frameView()) { 142343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) Vector<IntRect> tickmarksConverted(tickmarks.size()); 142443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) for (size_t i = 0; i < tickmarks.size(); ++i) 142543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) tickmarksConverted[i] = tickmarks[i]; 142643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) frameView()->setTickmarks(tickmarksConverted); 142707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch invalidateScrollbar(); 14285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 14295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 143110f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::contentAsText(size_t maxChars) const 14325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 14345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebString(); 14357757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch StringBuilder text; 14367757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch frameContentAsPlainText(maxChars, frame(), text); 14377757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch return text.toString(); 14385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 144010f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::contentAsMarkup() const 14415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 14435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebString(); 1444c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return createMarkup(frame()->document()); 14455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 144710f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::renderTreeAsText(RenderAsTextControls toShow) const 14485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderAsTextBehavior behavior = RenderAsTextBehaviorNormal; 14505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (toShow & RenderAsTextDebug) 14525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) behavior |= RenderAsTextShowCompositedLayers | RenderAsTextShowAddresses | RenderAsTextShowIDAndClass | RenderAsTextShowLayerNesting; 14535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (toShow & RenderAsTextPrinting) 14555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) behavior |= RenderAsTextPrintingMode; 14565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return externalRepresentation(frame(), behavior); 14585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 146010f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::markerTextForListItem(const WebElement& webElement) const 14615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1462c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return blink::markerTextForListItem(const_cast<Element*>(webElement.constUnwrap<Element>())); 14635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 146510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::printPagesWithBoundaries(WebCanvas* canvas, const WebSize& pageSizeInPixels) 14665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_printContext); 14685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 146953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) GraphicsContext graphicsContext(canvas); 147053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) graphicsContext.setPrinting(true); 14715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_printContext->spoolAllPagesWithBoundaries(graphicsContext, FloatSize(pageSizeInPixels.width, pageSizeInPixels.height)); 14735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 147510f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebRect WebLocalFrameImpl::selectionBoundsRect() const 14765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return hasSelection() ? WebRect(IntRect(frame()->selection().bounds())) : WebRect(); 14785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 148010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochbool WebLocalFrameImpl::selectionStartHasSpellingMarkerFor(int from, int length) const 14815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 14835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1484197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return frame()->spellChecker().selectionStartHasSpellingMarkerFor(from, length); 14855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 148710f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebString WebLocalFrameImpl::layerTreeAsText(bool showDebugInfo) const 14885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 14905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebString(); 1491e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1492521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return WebString(frame()->layerTreeAsText(showDebugInfo ? LayerTreeIncludesDebugInfo : LayerTreeNormal)); 14935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 149510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch// WebLocalFrameImpl public --------------------------------------------------------- 14965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14976f543c786fc42989f552b4daa774ca5ff32fa697Ben MurdochWebLocalFrame* WebLocalFrame::create(WebFrameClient* client) 14985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 149910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch return WebLocalFrameImpl::create(client); 15005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 150210f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrameImpl* WebLocalFrameImpl::create(WebFrameClient* client) 15031e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 15047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebLocalFrameImpl* frame = new WebLocalFrameImpl(client); 15057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#if ENABLE(OILPAN) 15067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return frame; 15077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#else 15087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return adoptRef(frame).leakRef(); 15097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif 15101e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 15111e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 151210f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrameImpl::WebLocalFrameImpl(WebFrameClient* client) 1513d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) : m_frameLoaderClientImpl(this) 15145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_client(client) 151509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) , m_permissionClient(0) 15161e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) , m_inputEventsScaleFactorForEmulation(1) 1517f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu , m_userMediaClientImpl(this) 15187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci , m_geolocationClientProxy(GeolocationClientProxy::create(client ? client->geolocationClient() : 0)) 15197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#if ENABLE(OILPAN) 15207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci , m_selfKeepAlive(this) 15217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif 15225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1523e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->incrementStatsCounter(webFrameActiveCount); 15245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frameCount++; 15255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 152710f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrameImpl::~WebLocalFrameImpl() 15285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1529e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->decrementStatsCounter(webFrameActiveCount); 15305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frameCount--; 15315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) cancelPendingScopingEffort(); 15335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebLocalFrameImpl::trace(Visitor* visitor) 15367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 15377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#if ENABLE(OILPAN) 15387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci visitor->trace(m_frame); 15397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci visitor->trace(m_printContext); 15407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci visitor->trace(m_geolocationClientProxy); 15417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 15427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebFrame::traceChildren(visitor, this); 15437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif 15447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 15457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 15467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebLocalFrameImpl::setCoreFrame(PassRefPtrWillBeRawPtr<LocalFrame> frame) 15475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 154809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_frame = frame; 15496f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 15506f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch // FIXME: we shouldn't add overhead to every frame by registering these objects when they're not used. 1551f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu if (m_frame) { 1552323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) OwnPtr<NotificationPresenterImpl> notificationPresenter = adoptPtr(new NotificationPresenterImpl()); 1553323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (m_client) 1554323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) notificationPresenter->initialize(m_client->notificationPresenter()); 1555323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 1556323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) provideNotification(*m_frame, notificationPresenter.release()); 15579e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) provideNotificationPermissionClientTo(*m_frame, NotificationPermissionClientImpl::create()); 1558f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu provideUserMediaTo(*m_frame, &m_userMediaClientImpl); 1559f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) provideGeolocationTo(*m_frame, m_geolocationClientProxy.get()); 1560f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) m_geolocationClientProxy->setController(GeolocationController::from(m_frame.get())); 15615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) provideMIDITo(*m_frame, MIDIClientProxy::create(m_client ? m_client->webMIDIClient() : 0)); 1562197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch provideLocalFileSystemTo(*m_frame, LocalFileSystemClient::create()); 1563197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 15645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (RuntimeEnabledFeatures::screenOrientationEnabled()) 15655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) ScreenOrientationController::provideTo(*m_frame, m_client ? m_client->webScreenOrientationClient() : 0); 1566f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu } 15675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPassRefPtrWillBeRawPtr<LocalFrame> WebLocalFrameImpl::initializeCoreFrame(FrameHost* host, FrameOwner* owner, const AtomicString& name, const AtomicString& fallbackName) 15705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeRawPtr<LocalFrame> frame = LocalFrame::create(&m_frameLoaderClientImpl, host, owner); 1572e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) setCoreFrame(frame); 1573197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch frame->tree().setName(name, fallbackName); 15745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We must call init() after m_frame is assigned because it is referenced 1575197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // during init(). Note that this may dispatch JS events; the frame may be 1576197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // detached after init() returns. 1577197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch frame->init(); 1578197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return frame; 15795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 15805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPassRefPtrWillBeRawPtr<LocalFrame> WebLocalFrameImpl::createChildFrame(const FrameLoadRequest& request, HTMLFrameOwnerElement* ownerElement) 15825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 15831e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) ASSERT(m_client); 15845d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WebLocalFrameImpl* webframeChild = toWebLocalFrameImpl(m_client->createChildFrame(this, request.frameName())); 15855d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!webframeChild) 1586d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 15871e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 1588a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // FIXME: Using subResourceAttributeName as fallback is not a perfect 1589a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // solution. subResourceAttributeName returns just one attribute name. The 1590a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // element might not have the attribute, and there might be other attributes 1591a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch // which can identify the element. 15927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci RefPtrWillBeRawPtr<LocalFrame> child = webframeChild->initializeCoreFrame(frame()->host(), ownerElement, request.frameName(), ownerElement->getAttribute(ownerElement->subResourceAttributeName())); 1593e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // Initializing the core frame may cause the new child to be detached, since 1594e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) // it may dispatch a load event in the parent. 15955d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!child->tree().parent()) 1596d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 15975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15987757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // If we're moving in the back/forward list, we might want to replace the content 15997757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // of this child frame with whatever was there at that point. 1600aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch RefPtr<HistoryItem> childItem; 1601a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (isBackForwardLoadType(frame()->loader().loadType()) && !frame()->document()->loadEventFinished()) 16025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) childItem = PassRefPtr<HistoryItem>(webframeChild->client()->historyItemForNewChildFrame(webframeChild)); 1603a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 1604a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (childItem) 16055d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) child->loader().loadHistoryItem(childItem.get()); 16067757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch else 16075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) child->loader().load(FrameLoadRequest(0, request.resourceRequest(), "_self")); 16085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16095d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // Note a synchronous navigation (about:blank) would have already processed 16105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // onload, so it is possible for the child frame to have already been 16115d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) // detached by script in the page. 16125d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!child->tree().parent()) 1613d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return nullptr; 16145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return child; 16155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 161710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::didChangeContentsSize(const IntSize& size) 16185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This is only possible on the main frame. 162007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder && m_textFinder->totalMatchCount() > 0) { 16215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!parent()); 162207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder->increaseMarkerVersion(); 16235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 16245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 162610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::createFrameView() 16275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1628197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch TRACE_EVENT0("blink", "WebLocalFrameImpl::createFrameView"); 16295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(frame()); // If frame() doesn't exist, we probably didn't init properly. 16315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 16325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebViewImpl* webView = viewImpl(); 1633197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool isLocalRoot = frame()->isLocalRoot(); 1634197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (isLocalRoot) 16355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webView->suppressInvalidations(true); 1636e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1637bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) frame()->createView(webView->size(), webView->baseBackgroundColor(), webView->isTransparent()); 1638197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (webView->shouldAutoResize() && isLocalRoot) 16399e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) frame()->view()->enableAutoSizeMode(webView->minAutoSize(), webView->maxAutoSize()); 16405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 164119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) frame()->view()->setInputEventsTransformForEmulation(m_inputEventsOffsetForEmulation, m_inputEventsScaleFactorForEmulation); 16421e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 1643197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (isLocalRoot) 16445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webView->suppressInvalidations(false); 16455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 164710f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrameImpl* WebLocalFrameImpl::fromFrame(LocalFrame* frame) 16485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame) 16505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 165176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) return fromFrame(*frame); 165276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)} 165376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 165476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)WebLocalFrameImpl* WebLocalFrameImpl::fromFrame(LocalFrame& frame) 165576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles){ 165676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) FrameLoaderClient* client = frame.loader().client(); 1657d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!client || !client->isFrameLoaderClientImpl()) 1658d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return 0; 1659d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return toFrameLoaderClientImpl(client)->webFrame(); 16605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 166210f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrameImpl* WebLocalFrameImpl::fromFrameOwnerElement(Element* element) 16635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 166410f88d5669dbd969c059d61ba09fa37dd72ac559Ben 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. 166543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) if (!isHTMLFrameElementBase(element)) 16665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 166707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return fromFrame(toLocalFrame(toHTMLFrameElementBase(element)->contentFrame())); 16685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 167010f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebViewImpl* WebLocalFrameImpl::viewImpl() const 16715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()) 16735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 16745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebViewImpl::fromPage(frame()->page()); 16755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 167710f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebDataSourceImpl* WebLocalFrameImpl::dataSourceImpl() const 16785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<WebDataSourceImpl*>(dataSource()); 16805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 168210f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebDataSourceImpl* WebLocalFrameImpl::provisionalDataSourceImpl() const 16835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 16845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<WebDataSourceImpl*>(provisionalDataSource()); 16855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 16865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 168710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setFindEndstateFocusAndSelection() 16885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 168910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* mainFrameImpl = viewImpl()->mainFrameImpl(); 16905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 169107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (this != mainFrameImpl->activeMatchFrame()) 169207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return; 169307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 169407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (Range* activeMatch = m_textFinder->activeMatch()) { 16955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If the user has set the selection since the match was found, we 16965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // don't focus anything. 16978abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) VisibleSelection selection(frame()->selection().selection()); 16985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!selection.isNone()) 16995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Need to clean out style and layout state before querying Element::isFocusable(). 17027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci frame()->document()->updateLayoutIgnorePendingStylesheets(); 17037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 17045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Try to find the first focusable node up the chain, which will, for 17055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // example, focus links if we have found text within the link. 170607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch Node* node = activeMatch->firstNode(); 17075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (node && node->isInShadowTree()) { 1708d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (Node* host = node->shadowHost()) { 1709d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (isHTMLInputElement(*host) || isHTMLTextAreaElement(*host)) 1710d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) node = host; 1711d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 17125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1713e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch for (; node; node = node->parentNode()) { 1714df95704c49daea886ddad70775bda23618d6274dBen Murdoch if (!node->isElementNode()) 1715df95704c49daea886ddad70775bda23618d6274dBen Murdoch continue; 1716df95704c49daea886ddad70775bda23618d6274dBen Murdoch Element* element = toElement(node); 1717df95704c49daea886ddad70775bda23618d6274dBen Murdoch if (element->isFocusable()) { 1718e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // Found a focusable parent node. Set the active match as the 1719e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // selection and focus to the focusable node. 172007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch frame()->selection().setSelection(VisibleSelection(activeMatch)); 1721df95704c49daea886ddad70775bda23618d6274dBen Murdoch frame()->document()->setFocusedElement(element); 1722e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 1723e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 17245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Iterate over all the nodes in the range until we find a focusable node. 17275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This, for example, sets focus to the first link if you search for 17285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // text and text that is within one or more links. 172907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch node = activeMatch->firstNode(); 173007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch for (; node && node != activeMatch->pastLastNode(); node = NodeTraversal::next(*node)) { 1731df95704c49daea886ddad70775bda23618d6274dBen Murdoch if (!node->isElementNode()) 1732df95704c49daea886ddad70775bda23618d6274dBen Murdoch continue; 1733df95704c49daea886ddad70775bda23618d6274dBen Murdoch Element* element = toElement(node); 1734df95704c49daea886ddad70775bda23618d6274dBen Murdoch if (element->isFocusable()) { 1735df95704c49daea886ddad70775bda23618d6274dBen Murdoch frame()->document()->setFocusedElement(element); 17365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // No node related to the active match was focusable, so set the 17415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // active match as the selection (so that when you end the Find session, 17425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // you'll have the last thing you found highlighted) and make sure that 17435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // we have nothing focused (otherwise you might have text selected but 17445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // a link focused, which is weird). 174507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch frame()->selection().setSelection(VisibleSelection(activeMatch)); 1746d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frame()->document()->setFocusedElement(nullptr); 17475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Finally clear the active match, for two reasons: 17495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We just finished the find 'session' and we don't want future (potentially 17505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // unrelated) find 'sessions' operations to start at the same place. 175110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // The WebLocalFrameImpl could get reused and the activeMatch could end up pointing 17525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // to a document that is no longer valid. Keeping an invalid reference around 17535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // is just asking for trouble. 175407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder->resetActiveMatch(); 17555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 17565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 175810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::didFail(const ResourceError& error, bool wasProvisional) 17595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!client()) 17615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebURLError webError = error; 17635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (wasProvisional) 17645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) client()->didFailProvisionalLoad(this, webError); 17655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 17665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) client()->didFailLoad(this, webError); 17675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 176910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setCanHaveScrollbars(bool canHaveScrollbars) 17705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 17715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) frame()->view()->setCanHaveScrollbars(canHaveScrollbars); 17725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 17735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 177410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::setInputEventsTransformForEmulation(const IntSize& offset, float contentScaleFactor) 17751e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles){ 177619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) m_inputEventsOffsetForEmulation = offset; 17771e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) m_inputEventsScaleFactorForEmulation = contentScaleFactor; 17781e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) if (frame()->view()) 177919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) frame()->view()->setInputEventsTransformForEmulation(m_inputEventsOffsetForEmulation, m_inputEventsScaleFactorForEmulation); 17801e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)} 17811e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 178210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::loadJavaScriptURL(const KURL& url) 17835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 178493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) // This is copied from ScriptController::executeScriptIfJavaScriptURL. 17855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Unfortunately, we cannot just use that method since it is private, and 178610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // it also doesn't quite behave as we require it to for bookmarklets. The 17875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // key difference is that we need to suppress loading the string result 17885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // from evaluating the JS URL if executing the JS URL resulted in a 178910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch // location change. We also allow a JS URL to be loaded even if scripts on 17905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // the page are otherwise disabled. 17915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!frame()->document() || !frame()->page()) 17935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 17945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1795d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<Document> ownerDocument(frame()->document()); 17965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Protect privileged pages against bookmarklets and other javascript manipulations. 17985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (SchemeRegistry::shouldTreatURLSchemeAsNotAllowingJavascriptURLs(frame()->document()->url().protocol())) 17995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 18005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String script = decodeURLEscapeSequences(url.string().substring(strlen("javascript:"))); 18021e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); 18035d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8::HandleScope handleScope(toIsolate(frame())); 18045d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) v8::Local<v8::Value> result = frame()->script().executeScriptInMainWorldAndReturnValue(ScriptSourceCode(script)); 18055d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (result.IsEmpty() || !result->IsString()) 18065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 18075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) String scriptResult = toCoreString(v8::Handle<v8::String>::Cast(result)); 1808f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) if (!frame()->navigationScheduler().locationChangePending()) 18097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci frame()->loader().replaceDocumentWhileExecutingJavaScriptURL(scriptResult, ownerDocument.get()); 18107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 18117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 18127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebLocalFrameImpl::sendPings(const WebNode& linkNode, const WebURL& destinationURL) 18137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 18147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(frame()); 18157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci const Node* node = linkNode.constUnwrap<Node>(); 18167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (isHTMLAnchorElement(node)) 18177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci toHTMLAnchorElement(node)->sendPings(destinationURL); 18187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 18197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 18207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccibool WebLocalFrameImpl::isLoading() const 18217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 18227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!frame() || !frame()->document()) 18237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return false; 18247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return frame()->loader().stateMachine()->isDisplayingInitialEmptyDocument() || !frame()->document()->loadEventFinished(); 18257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 18267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 18277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccibool WebLocalFrameImpl::isResourceLoadInProgress() const 18287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 18297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!frame() || !frame()->document()) 18307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return false; 18317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return frame()->document()->fetcher()->requestCount(); 18325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 183476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)void WebLocalFrameImpl::addStyleSheetByURL(const WebString& url) 183576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles){ 183676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) RefPtrWillBeRawPtr<Element> styleElement = frame()->document()->createElement(HTMLNames::linkTag, false); 183776c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 183876c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) styleElement->setAttribute(HTMLNames::typeAttr, "text/css"); 183976c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) styleElement->setAttribute(HTMLNames::relAttr, "stylesheet"); 184076c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) styleElement->setAttribute(HTMLNames::hrefAttr, url); 184176c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 184276c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) frame()->document()->head()->appendChild(styleElement.release(), IGNORE_EXCEPTION); 184376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)} 184476c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles) 18457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebLocalFrameImpl::navigateToSandboxedMarkup(const WebData& markup) 18467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 18477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(document().securityOrigin().isUnique()); 18487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci frame()->loader().forceSandboxFlags(SandboxAll); 18497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci loadHTMLString(markup, document().url(), WebURL(), true); 18507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 18517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 18527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid WebLocalFrameImpl::sendOrientationChangeEvent() 18537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 18547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!frame()) 18557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 18567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 18577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Screen Orientation API 18587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (ScreenOrientationController::from(*frame())) 18597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ScreenOrientationController::from(*frame())->notifyOrientationChanged(); 18607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 18617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Legacy window.orientation API. 18627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (RuntimeEnabledFeatures::orientationEventEnabled() && frame()->domWindow()) 18637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci frame()->domWindow()->dispatchEvent(Event::create(EventTypeNames::orientationchange)); 18647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 18657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 18667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciv8::Handle<v8::Value> WebLocalFrameImpl::executeScriptAndReturnValueForTests(const WebScriptSource& source) 18677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 18687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: This fake UserGestureIndicator is required for a bunch of browser 18697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // tests to pass. We should update the tests to simulate input and get rid 18707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // of this. 18717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // http://code.google.com/p/chromium/issues/detail?id=86397 18727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci UserGestureIndicator gestureIndicator(DefinitelyProcessingNewUserGesture); 18737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return executeScriptAndReturnValue(source); 18747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 18757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 187610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::willDetachParent() 18775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 18785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Do not expect string scoping results from any frames that got detached 18795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // in the middle of the operation. 188007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder && m_textFinder->scopingInProgress()) { 18815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // There is a possibility that the frame being detached was the only 18835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // pending one. We need to make sure final replies can be sent. 188407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder->flushCurrentScoping(); 18855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 188607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder->cancelPendingScopingEffort(); 18875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 18885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 18895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 189010f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochWebLocalFrameImpl* WebLocalFrameImpl::activeMatchFrame() const 189107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 189207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(!parent()); 189307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 189407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder) 189507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return m_textFinder->activeMatchFrame(); 189607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return 0; 189707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 189807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 1899e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)Range* WebLocalFrameImpl::activeMatch() const 190007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 190107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (m_textFinder) 190207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return m_textFinder->activeMatch(); 190307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return 0; 190407a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 190507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 190610f88d5669dbd969c059d61ba09fa37dd72ac559Ben MurdochTextFinder& WebLocalFrameImpl::ensureTextFinder() 190707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 190807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (!m_textFinder) 190907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch m_textFinder = TextFinder::create(*this); 191007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 191107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch return *m_textFinder; 191207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 191307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 191410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::invalidateScrollbar() const 191507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 191607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(frame() && frame()->view()); 191707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch FrameView* view = frame()->view(); 191807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch // Invalidate the vertical scroll bar region for the view. 191907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch Scrollbar* scrollbar = view->verticalScrollbar(); 192007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch if (scrollbar) 192107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch scrollbar->invalidate(); 192207a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 192307a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 192410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid WebLocalFrameImpl::invalidateAll() const 192507a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch{ 192607a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch ASSERT(frame() && frame()->view()); 192707a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch FrameView* view = frame()->view(); 192807a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch view->invalidateRect(view->frameRect()); 192907a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch invalidateScrollbar(); 193007a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch} 193107a852d8c1953036774d8f3b65d18dcfea3bb4a2Ben Murdoch 193251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 1933