15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 33f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/ChromeClientImpl.h" 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 35197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptController.h" 3676c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "core/HTMLNames.h" 37bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "core/accessibility/AXObject.h" 38e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/accessibility/AXObjectCache.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Document.h" 409e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles)#include "core/dom/Fullscreen.h" 4153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Node.h" 4209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/events/KeyboardEvent.h" 4309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/events/MouseEvent.h" 4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/events/WheelEvent.h" 45f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/frame/Console.h" 46f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/frame/FrameView.h" 47f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/frame/Settings.h" 4853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLInputElement.h" 497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/html/forms/ColorChooser.h" 507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/html/forms/ColorChooserClient.h" 517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/html/forms/DateTimeChooser.h" 5253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/DocumentLoader.h" 5353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoadRequest.h" 5453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h" 5553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/PagePopupDriver.h" 56e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/page/WindowFeatures.h" 5753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/HitTestResult.h" 58197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "core/rendering/RenderPart.h" 5953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderWidget.h" 607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "core/rendering/compositing/CompositedSelectionBound.h" 61a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/Cursor.h" 621e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/FileChooser.h" 6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/NotImplemented.h" 64bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "platform/PlatformScreen.h" 6576c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "platform/RuntimeEnabledFeatures.h" 6619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#include "platform/exported/WrappedResourceRequest.h" 671e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/FloatRect.h" 681e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/IntRect.h" 69a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsLayer.h" 7051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/SecurityOrigin.h" 715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/Platform.h" 7251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "public/platform/WebCursorInfo.h" 735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebRect.h" 747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#include "public/platform/WebSelectionBound.h" 755267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebURLRequest.h" 76f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebAXObject.h" 77f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebAutofillClient.h" 78f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebColorChooser.h" 79f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebColorSuggestion.h" 80f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebConsoleMessage.h" 81f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebFrameClient.h" 82f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebInputElement.h" 83f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebInputEvent.h" 84f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebKit.h" 85f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebNode.h" 86f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPlugin.h" 87f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPopupMenuInfo.h" 88f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebSettings.h" 89f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebTextDirection.h" 90a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "public/web/WebTouchAction.h" 91f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebUserGestureIndicator.h" 92f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebUserGestureToken.h" 93f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebViewClient.h" 94f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebWindowFeatures.h" 95f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/ColorChooserPopupUIController.h" 96f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/ColorChooserUIController.h" 97f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/DateTimeChooserImpl.h" 98f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/ExternalDateTimeChooser.h" 99f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/ExternalPopupMenu.h" 100f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/PopupMenuChromium.h" 101f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebFileChooserCompletionImpl.h" 102f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebInputEventConversion.h" 103f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebLocalFrameImpl.h" 104f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPluginContainerImpl.h" 105f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPopupMenuImpl.h" 106f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebSettingsImpl.h" 107f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebViewImpl.h" 108591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/CString.h" 109591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/StringBuilder.h" 110591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/StringConcatenate.h" 111591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/unicode/CharacterNames.h" 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 115e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)// Converts a AXObjectCache::AXNotification to a WebAXEvent 116c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)static WebAXEvent toWebAXEvent(AXObjectCache::AXNotification notification) 117c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 118c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // These enums have the same values; enforced in AssertMatchingEnums.cpp. 119c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return static_cast<WebAXEvent>(notification); 120c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 121c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 1227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccistatic WebSelectionBound toWebSelectionBound(const CompositedSelectionBound& bound) 1237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 1247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT(bound.layer); 1257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // These enums have the same values; enforced in AssertMatchingEnums.cpp. 1277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebSelectionBound result(static_cast<WebSelectionBound::Type>(bound.type)); 1287242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci result.layerId = bound.layer->platformLayer()->id(); 1297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci result.edgeTopInLayer = roundedIntPoint(bound.edgeTopInLayer); 1307242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci result.edgeBottomInLayer = roundedIntPoint(bound.edgeBottomInLayer); 1317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return result; 1327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 1337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ChromeClientImpl::ChromeClientImpl(WebViewImpl* webView) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_webView(webView) 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_toolbarsVisible(true) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_statusbarVisible(true) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_scrollbarsVisible(true) 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_menubarVisible(true) 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_resizable(true) 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_pagePopupDriver(webView) 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ChromeClientImpl::~ChromeClientImpl() 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void* ChromeClientImpl::webView() const 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<void*>(m_webView); 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::chromeDestroyed() 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Our lifetime is bound to the WebViewImpl. 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setWindowRect(const FloatRect& r) 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setWindowRect(IntRect(r)); 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FloatRect ChromeClientImpl::windowRect() 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebRect rect; 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect = m_webView->client()->rootWindowRect(); 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else { 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // These numbers will be fairly wrong. The window's x/y coordinates will 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // be the top left corner of the screen and the size will be the content 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // size instead of the window size. 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect.width = m_webView->size().width; 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect.height = m_webView->size().height; 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return FloatRect(rect); 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FloatRect ChromeClientImpl::pageRect() 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We hide the details of the window's border thickness from the web page by 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // simple re-using the window position here. So, from the point-of-view of 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // the web page, the window has no border. 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return windowRect(); 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::focus() 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->didFocus(); 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 19409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)bool ChromeClientImpl::canTakeFocus(FocusType) 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // For now the browser can always take focus if we're not running layout 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // tests. 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !layoutTestMode(); 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 20109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void ChromeClientImpl::takeFocus(FocusType type) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 20509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (type == FocusTypeBackward) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->focusPrevious(); 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->focusNext(); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::focusedNodeChanged(Node* node) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->focusedNodeChanged(WebNode(node)); 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebURL focusURL; 216197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (node && node->isElementNode() && toElement(node)->isLiveLink()) 217197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch focusURL = toElement(node)->hrefURL(); 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setKeyboardFocusURL(focusURL); 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 221e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void ChromeClientImpl::focusedFrameChanged(LocalFrame* frame) 222d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 22310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(frame); 224d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (webframe && webframe->client()) 225d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) webframe->client()->frameFocused(); 226d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 227d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 228d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)Page* ChromeClientImpl::createWindow(LocalFrame* frame, const FrameLoadRequest& r, const WindowFeatures& features, 22951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) NavigationPolicy navigationPolicy, ShouldSendReferrer shouldSendReferrer) 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 234591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebNavigationPolicy policy = static_cast<WebNavigationPolicy>(navigationPolicy); 235591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (policy == WebNavigationPolicyIgnore) 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) policy = getNavigationPolicy(); 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 238d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ASSERT(frame->document()); 2399e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) Fullscreen::fullyExitFullscreen(*frame->document()); 240bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 241c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) WebViewImpl* newView = toWebViewImpl( 24210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_webView->client()->createView(WebLocalFrameImpl::fromFrame(frame), WrappedResourceRequest(r.resourceRequest()), features, r.frameName(), policy, shouldSendReferrer == NeverSendReferrer)); 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!newView) 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return newView->page(); 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 248591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochstatic inline void updatePolicyForEvent(const WebInputEvent* inputEvent, NavigationPolicy* policy) 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!inputEvent || inputEvent->type != WebInputEvent::MouseUp) 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const WebMouseEvent* mouseEvent = static_cast<const WebMouseEvent*>(inputEvent); 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned short buttonNumber; 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (mouseEvent->button) { 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebMouseEvent::ButtonLeft: 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) buttonNumber = 0; 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebMouseEvent::ButtonMiddle: 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) buttonNumber = 1; 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebMouseEvent::ButtonRight: 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) buttonNumber = 2; 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool ctrl = mouseEvent->modifiers & WebMouseEvent::ControlKey; 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shift = mouseEvent->modifiers & WebMouseEvent::ShiftKey; 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool alt = mouseEvent->modifiers & WebMouseEvent::AltKey; 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool meta = mouseEvent->modifiers & WebMouseEvent::MetaKey; 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 274591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch NavigationPolicy userPolicy = *policy; 275591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch navigationPolicyFromMouseEvent(buttonNumber, ctrl, shift, alt, meta, &userPolicy); 276926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // User and app agree that we want a new window; let the app override the decorations. 277591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (userPolicy == NavigationPolicyNewWindow && *policy == NavigationPolicyNewPopup) 278926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *policy = userPolicy; 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebNavigationPolicy ChromeClientImpl::getNavigationPolicy() 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If our default configuration was modified by a script or wasn't 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // created by a user gesture, then show as a popup. Else, let this 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // new window be opened as a toplevel window. 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool asPopup = !m_toolbarsVisible 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || !m_statusbarVisible 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || !m_scrollbarsVisible 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || !m_menubarVisible 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || !m_resizable; 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 293591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch NavigationPolicy policy = NavigationPolicyNewForegroundTab; 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (asPopup) 295591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch policy = NavigationPolicyNewPopup; 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updatePolicyForEvent(WebViewImpl::currentInputEvent(), &policy); 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 298591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return static_cast<WebNavigationPolicy>(policy); 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 301591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochvoid ChromeClientImpl::show(NavigationPolicy navigationPolicy) 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 306591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebNavigationPolicy policy = static_cast<WebNavigationPolicy>(navigationPolicy); 307591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (policy == WebNavigationPolicyIgnore) 308591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch policy = getNavigationPolicy(); 309591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch m_webView->client()->show(policy); 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::canRunModal() 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !!m_webView->client(); 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::runModal() 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->runModal(); 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setToolbarsVisible(bool value) 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_toolbarsVisible = value; 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::toolbarsVisible() 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_toolbarsVisible; 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setStatusbarVisible(bool value) 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_statusbarVisible = value; 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::statusbarVisible() 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_statusbarVisible; 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setScrollbarsVisible(bool value) 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbarsVisible = value; 34610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webFrame = toWebLocalFrameImpl(m_webView->mainFrame()); 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webFrame) 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webFrame->setCanHaveScrollbars(value); 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::scrollbarsVisible() 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbarsVisible; 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setMenubarVisible(bool value) 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_menubarVisible = value; 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::menubarVisible() 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_menubarVisible; 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setResizable(bool value) 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_resizable = value; 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 371c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)bool ChromeClientImpl::shouldReportDetailedMessageForSource(const String& url) 372c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 373197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebLocalFrameImpl* webframe = m_webView->localFrameRootTemporary(); 374a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return webframe->client() && webframe->client()->shouldReportDetailedMessageForSource(url); 375c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 376c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 3776f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdochvoid ChromeClientImpl::addMessageToConsole(LocalFrame* localFrame, MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID, const String& stackTrace) 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 37910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* frame = WebLocalFrameImpl::fromFrame(localFrame); 3806f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (frame && frame->client()) { 3816f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch frame->client()->didAddMessageToConsole( 382aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch WebConsoleMessage(static_cast<WebConsoleMessage::Level>(level), message), 383aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch sourceID, 384aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch lineNumber, 385aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch stackTrace); 386aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::canRunBeforeUnloadConfirmPanel() 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !!m_webView->client(); 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 394d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)bool ChromeClientImpl::runBeforeUnloadConfirmPanel(const String& message, LocalFrame* frame) 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 39610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(frame); 3976f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 3986f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch bool isReload = false; 3996f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch WebDataSource* ds = webframe->provisionalDataSource(); 4006f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (ds) 401e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) isReload = (ds->navigationType() == WebNavigationTypeReload); 4026f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 4036f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (webframe->client()) 4046f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch return webframe->client()->runModalBeforeUnloadDialog(isReload, message); 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::closeWindowSoon() 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make sure this Page can no longer be found by JS. 411d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) Page::ordinaryPages().remove(m_webView->page()); 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make sure that all loading is stopped. Ensures that JS stops executing! 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->mainFrame()->stopLoading(); 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->closeWidgetSoon(); 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 420d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Although a LocalFrame is passed in, we don't actually use it, since we 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// already know our own m_webView. 422d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::runJavaScriptAlert(LocalFrame* frame, const String& message) 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 42410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(frame); 4256f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (webframe->client()) { 4263c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch if (WebUserGestureIndicator::isProcessingUserGesture()) 4273c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch WebUserGestureIndicator::currentUserGestureToken().setJavascriptPrompt(); 4286f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch webframe->client()->runModalAlertDialog(message); 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// See comments for runJavaScriptAlert(). 433d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)bool ChromeClientImpl::runJavaScriptConfirm(LocalFrame* frame, const String& message) 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 43510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(frame); 4366f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (webframe->client()) { 4373c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch if (WebUserGestureIndicator::isProcessingUserGesture()) 4383c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch WebUserGestureIndicator::currentUserGestureToken().setJavascriptPrompt(); 4396f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch return webframe->client()->runModalConfirmDialog(message); 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// See comments for runJavaScriptAlert(). 445d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)bool ChromeClientImpl::runJavaScriptPrompt(LocalFrame* frame, 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String& message, 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String& defaultValue, 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String& result) 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 45010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(frame); 4516f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (webframe->client()) { 4523c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch if (WebUserGestureIndicator::isProcessingUserGesture()) 4533c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch WebUserGestureIndicator::currentUserGestureToken().setJavascriptPrompt(); 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebString actualValue; 4556f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch bool ok = webframe->client()->runModalPromptDialog( 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) message, 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) defaultValue, 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) &actualValue); 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (ok) 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = actualValue; 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ok; 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setStatusbarText(const String& message) 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setStatusText(message); 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 47253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)bool ChromeClientImpl::tabsToLinks() 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 47453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_webView->tabsToLinks(); 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntRect ChromeClientImpl::windowResizerRect() const 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect result; 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = m_webView->client()->windowResizerRect(); 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void ChromeClientImpl::invalidateContentsAndRootView(const IntRect& updateRect) 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (updateRect.isEmpty()) 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->invalidateRect(updateRect); 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 49253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void ChromeClientImpl::invalidateContentsForSlowScroll(const IntRect& updateRect) 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 49453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) invalidateContentsAndRootView(updateRect); 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::scheduleAnimation() 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->scheduleAnimation(); 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntRect ChromeClientImpl::rootViewToScreen(const IntRect& rect) const 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect screenRect(rect); 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) { 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebRect windowRect = m_webView->client()->windowRect(); 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) screenRect.move(windowRect.x, windowRect.y); 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return screenRect; 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 51453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebScreenInfo ChromeClientImpl::screenInfo() const 51553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 51653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_webView->client() ? m_webView->client()->screenInfo() : WebScreenInfo(); 51753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 51853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 519d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::contentsSizeChanged(LocalFrame* frame, const IntSize& size) const 5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->didChangeContentsSize(); 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 52310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(frame); 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webframe->didChangeContentsSize(size); 525d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 526d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frame->loader().restoreScrollPositionAndViewState(); 5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 52953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void ChromeClientImpl::deviceOrPageScaleFactorChanged() const 53053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 53153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_webView->deviceOrPageScaleFactorChanged(); 53253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 53353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 534d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::layoutUpdated(LocalFrame* frame) const 5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 53610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_webView->layoutUpdated(WebLocalFrameImpl::fromFrame(frame)); 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::mouseDidMoveOverElement( 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const HitTestResult& result, unsigned modifierFlags) 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebURL url; 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Find out if the mouse is over a link, and if so, let our UI know... 547d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (result.isLiveLink() && !result.absoluteLinkURL().string().isEmpty()) { 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) url = result.absoluteLinkURL(); 549d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } else if (result.innerNonSharedNode() 550d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) && (isHTMLObjectElement(*result.innerNonSharedNode()) 551d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) || isHTMLEmbedElement(*result.innerNonSharedNode()))) { 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* object = result.innerNonSharedNode()->renderer(); 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (object && object->isWidget()) { 5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Widget* widget = toRenderWidget(object)->widget(); 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (widget && widget->isPluginContainer()) { 55609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WebPluginContainerImpl* plugin = toWebPluginContainerImpl(widget); 557926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) url = plugin->plugin()->linkAtPosition(result.roundedPointInInnerNodeFrame()); 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setMouseOverURL(url); 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setToolTip(const String& tooltipText, TextDirection dir) 5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 567e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (m_webView->client()) 568e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) m_webView->client()->setToolTipText(tooltipText, toWebTextDirection(dir)); 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5711e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void ChromeClientImpl::dispatchViewportPropertiesDidChange(const ViewportDescription& description) const 5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 573bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) m_webView->updatePageDefinedViewportConstraints(description); 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 576d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::print(LocalFrame* frame) 5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 57910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_webView->client()->printPage(WebLocalFrameImpl::fromFrame(frame)); 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5826f543c786fc42989f552b4daa774ca5ff32fa697Ben MurdochPassOwnPtr<ColorChooser> ChromeClientImpl::createColorChooser(LocalFrame* frame, ColorChooserClient* chooserClient, const Color&) 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 584926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) OwnPtr<ColorChooserUIController> controller; 58593ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (RuntimeEnabledFeatures::pagePopupEnabled()) 5866f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch controller = adoptPtr(new ColorChooserPopupUIController(frame, this, chooserClient)); 58793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) else 5886f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch controller = adoptPtr(new ColorChooserUIController(frame, chooserClient)); 589926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) controller->openUI(); 590926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return controller.release(); 5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPassRefPtr<DateTimeChooser> ChromeClientImpl::openDateTimeChooser(DateTimeChooserClient* pickerClient, const DateTimeChooserParameters& parameters) 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return DateTimeChooserImpl::create(this, pickerClient, parameters); 5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#else 598926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return ExternalDateTimeChooser::create(this, m_webView->client(), pickerClient, parameters); 5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 602d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::runOpenPanel(LocalFrame* frame, PassRefPtr<FileChooser> fileChooser) 6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebViewClient* client = m_webView->client(); 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!client) 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFileChooserParams params; 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.multiSelect = fileChooser->settings().allowsMultipleFiles; 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.directory = fileChooser->settings().allowsDirectoryUpload; 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.acceptTypes = fileChooser->settings().acceptTypes(); 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.selectedFiles = fileChooser->settings().selectedFiles; 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (params.selectedFiles.size() > 0) 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.initialValue = params.selectedFiles[0]; 615e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch params.useMediaCapture = fileChooser->settings().useMediaCapture; 616197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFileChooserCompletionImpl* chooserCompletion = 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) new WebFileChooserCompletionImpl(fileChooser); 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (client->runFileChooser(params, chooserCompletion)) 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Choosing failed, so do callback with an empty list. 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) chooserCompletion->didChooseFile(WebVector<WebString>()); 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::enumerateChosenDirectory(FileChooser* fileChooser) 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebViewClient* client = m_webView->client(); 6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!client) 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFileChooserCompletionImpl* chooserCompletion = 6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) new WebFileChooserCompletionImpl(fileChooser); 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(fileChooser && fileChooser->settings().selectedFiles.size()); 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If the enumeration can't happen, call the callback with an empty list. 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!client->enumerateChosenDirectory(fileChooser->settings().selectedFiles[0], chooserCompletion)) 6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) chooserCompletion->didChooseFile(WebVector<WebString>()); 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 643e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)void ChromeClientImpl::setCursor(const Cursor& cursor) 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setCursor(WebCursorInfo(cursor)); 6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setCursor(const WebCursorInfo& cursor) 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6508abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#if OS(MACOSX) 651926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // On Mac the mousemove event propagates to both the popup and main window. 652926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // If a popup is open we don't want the main window to change the cursor. 653926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_webView->hasOpenedPopup()) 654926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 655926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#endif 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->didChangeCursor(cursor); 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setCursorForPlugin(const WebCursorInfo& cursor) 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setCursor(cursor); 6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 665bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)void ChromeClientImpl::postAccessibilityNotification(AXObject* obj, AXObjectCache::AXNotification notification) 6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Alert assistive technology about the accessibility object notification. 668697ef0c10ac944be8499480c025020e4c282c980Ben Murdoch if (!obj || !obj->document()) 669c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return; 6707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 671697ef0c10ac944be8499480c025020e4c282c980Ben Murdoch WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(obj->document()->axObjectCacheOwner().frame()); 6727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (webframe && webframe->client()) 6737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci webframe->client()->postAccessibilityEvent(WebAXObject(obj), toWebAXEvent(notification)); 6747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 6757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // FIXME: delete these lines once Chrome only uses the frame client interface, above. 67609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_webView->client()) 67709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_webView->client()->postAccessibilityEvent(WebAXObject(obj), toWebAXEvent(notification)); 6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 680521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)String ChromeClientImpl::acceptLanguages() 681521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles){ 682521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return m_webView->client()->acceptLanguages(); 683521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)} 684521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::paintCustomOverhangArea(GraphicsContext* context, const IntRect& horizontalOverhangArea, const IntRect& verticalOverhangArea, const IntRect& dirtyRect) 6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 687d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame = m_webView->mainFrameImpl()->frame(); 68810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebPluginContainerImpl* pluginContainer = WebLocalFrameImpl::pluginContainerFromFrame(frame); 6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pluginContainer) 6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return pluginContainer->paintCustomOverhangArea(context, horizontalOverhangArea, verticalOverhangArea, dirtyRect); 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 694926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)GraphicsLayerFactory* ChromeClientImpl::graphicsLayerFactory() const 695926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 696926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_webView->graphicsLayerFactory(); 697926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 698926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 699d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::attachRootGraphicsLayer(GraphicsLayer* rootLayer) 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 701d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_webView->setRootGraphicsLayer(rootLayer); 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::enterFullScreenForElement(Element* element) 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->enterFullScreenForElement(element); 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::exitFullScreenForElement(Element* element) 7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->exitFullScreenForElement(element); 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 714197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid ChromeClientImpl::clearCompositedSelectionBounds() 715197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 716197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch m_webView->clearCompositedSelectionBounds(); 717197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 718197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 7197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccivoid ChromeClientImpl::updateCompositedSelectionBounds(const CompositedSelectionBound& anchor, const CompositedSelectionBound& focus) 7207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{ 7217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci m_webView->updateCompositedSelectionBounds(toWebSelectionBound(anchor), toWebSelectionBound(focus)); 7227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci} 7237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::hasOpenedPopup() const 7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webView->hasOpenedPopup(); 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciPassRefPtrWillBeRawPtr<PopupMenu> ChromeClientImpl::createPopupMenu(LocalFrame& frame, PopupMenuClient* client) const 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (WebViewImpl::useExternalPopupMenus()) 7327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return adoptRefWillBeNoop(new ExternalPopupMenu(frame, client, *m_webView)); 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7347242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return adoptRefWillBeNoop(new PopupMenuChromium(frame, client)); 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PagePopup* ChromeClientImpl::openPagePopup(PagePopupClient* client, const IntRect& originBoundsInRootView) 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_pagePopupDriver); 7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_pagePopupDriver->openPagePopup(client, originBoundsInRootView); 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::closePagePopup(PagePopup* popup) 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_pagePopupDriver); 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_pagePopupDriver->closePagePopup(popup); 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setPagePopupDriver(PagePopupDriver* driver) 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(driver); 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_pagePopupDriver = driver; 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::resetPagePopupDriver() 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_pagePopupDriver = m_webView; 7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 760e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)bool ChromeClientImpl::shouldRunModalDialogDuringPageDismissal(const DialogType& dialogType, const String& dialogMessage, Document::PageDismissalType dismissalType) const 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const char* kDialogs[] = {"alert", "confirm", "prompt", "showModalDialog"}; 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dialog = static_cast<int>(dialogType); 764926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT_WITH_SECURITY_IMPLICATION(0 <= dialog && dialog < static_cast<int>(arraysize(kDialogs))); 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const char* kDismissals[] = {"beforeunload", "pagehide", "unload"}; 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dismissal = static_cast<int>(dismissalType) - 1; // Exclude NoDismissal. 768926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT_WITH_SECURITY_IMPLICATION(0 <= dismissal && dismissal < static_cast<int>(arraysize(kDismissals))); 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 770e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Platform::current()->histogramEnumeration("Renderer.ModalDialogsDuringPageDismissal", dismissal * arraysize(kDialogs) + dialog, arraysize(kDialogs) * arraysize(kDismissals)); 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 77293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) String message = String("Blocked ") + kDialogs[dialog] + "('" + dialogMessage + "') during " + kDismissals[dismissal] + "."; 77393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) m_webView->mainFrame()->addMessageToConsole(WebConsoleMessage(WebConsoleMessage::LevelError, message)); 7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::needTouchEvents(bool needsTouchEvents) 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->hasTouchEventHandlers(needsTouchEvents); 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 783a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void ChromeClientImpl::setTouchAction(TouchAction touchAction) 784a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 785a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (WebViewClient* client = m_webView->client()) { 786a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) WebTouchAction webTouchAction = static_cast<WebTouchAction>(touchAction); 787a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) client->setTouchAction(webTouchAction); 788a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) } 789a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 790a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::requestPointerLock() 7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webView->requestPointerLock(); 7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::requestPointerUnlock() 7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webView->requestPointerUnlock(); 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::annotatedRegionsChanged() 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebViewClient* client = m_webView->client(); 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (client) 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) client->draggableRegionsChanged(); 8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 808d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void ChromeClientImpl::didAssociateFormControls(const WillBeHeapVector<RefPtrWillBeMember<Element> >& elements) 809926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 810d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (m_webView->autofillClient()) 811d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_webView->autofillClient()->didAssociateFormControls(elements); 812926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 813926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 81451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void ChromeClientImpl::didCancelCompositionOnSelectionChange() 81551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 81651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (m_webView->client()) 81751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_webView->client()->didCancelCompositionOnSelectionChange(); 81851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 81951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 82051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void ChromeClientImpl::willSetInputMethodState() 82151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 82251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (m_webView->client()) 82351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_webView->client()->resetInputMethod(); 82451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 82551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 826a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochvoid ChromeClientImpl::didUpdateTextOfFocusedElementByNonUserInput() 827a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{ 828a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (m_webView->client()) 829a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_webView->client()->didUpdateTextOfFocusedElementByNonUserInput(); 830a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch} 831a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 832197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid ChromeClientImpl::showImeIfNeeded() 833197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 834197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (m_webView->client()) 835197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch m_webView->client()->showImeIfNeeded(); 836197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 837197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 83851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void ChromeClientImpl::handleKeyboardEventOnTextField(HTMLInputElement& inputElement, KeyboardEvent& event) 83951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 84051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!m_webView->autofillClient()) 84151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return; 84251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_webView->autofillClient()->textFieldDidReceiveKeyDown(WebInputElement(&inputElement), WebKeyboardEventBuilder(event)); 84351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 84451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 84509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// FIXME: Remove this code once we have input routing in the browser 84609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// process. See http://crbug.com/339659. 84709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void ChromeClientImpl::forwardInputEvent( 848e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) Frame* frame, Event* event) 84909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 850197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // FIXME: Input event forwarding to out-of-process frames is broken until 851197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // WebRemoteFrameImpl has a WebFrameClient. 852197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (frame->isRemoteFrame()) 853197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 854197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 855197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(toLocalFrame(frame)); 85609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 85709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // This is only called when we have out-of-process iframes, which 85809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // need to forward input events across processes. 85909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // FIXME: Add a check for out-of-process iframes enabled. 86009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (event->isKeyboardEvent()) { 861e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebKeyboardEventBuilder webEvent(*static_cast<KeyboardEvent*>(event)); 86209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webFrame->client()->forwardInputEvent(&webEvent); 86309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } else if (event->isMouseEvent()) { 864e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebMouseEventBuilder webEvent(webFrame->frameView(), frame->ownerRenderer(), *static_cast<MouseEvent*>(event)); 86509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Internal Blink events should not be forwarded. 86609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (webEvent.type == WebInputEvent::Undefined) 86709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 86809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 86909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webFrame->client()->forwardInputEvent(&webEvent); 87009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } else if (event->isWheelEvent()) { 871e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebMouseWheelEventBuilder webEvent(webFrame->frameView(), frame->ownerRenderer(), *static_cast<WheelEvent*>(event)); 87209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (webEvent.type == WebInputEvent::Undefined) 87309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 87409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webFrame->client()->forwardInputEvent(&webEvent); 87509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 87609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 87709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 878d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::didChangeValueInTextField(HTMLFormControlElement& element) 879d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 880d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!m_webView->autofillClient()) 881d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return; 882d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_webView->autofillClient()->textFieldDidChange(WebFormControlElement(&element)); 883d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 884d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 88551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void ChromeClientImpl::didEndEditingOnTextField(HTMLInputElement& inputElement) 88651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 88751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (m_webView->autofillClient()) 88851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_webView->autofillClient()->textFieldDidEndEditing(WebInputElement(&inputElement)); 88909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 89051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 89109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void ChromeClientImpl::openTextDataListChooser(HTMLInputElement& input) 89209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 89309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_webView->autofillClient()) 89409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_webView->autofillClient()->openTextDataListChooser(WebInputElement(&input)); 89551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 89651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 89751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 898