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) 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/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" 40bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "core/dom/DocumentFullscreen.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" 4953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/DocumentLoader.h" 5053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoadRequest.h" 5153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h" 5253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/PagePopupDriver.h" 53e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/page/WindowFeatures.h" 5453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/HitTestResult.h" 5553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderWidget.h" 5619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#include "platform/ColorChooser.h" 5719cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#include "platform/ColorChooserClient.h" 58a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/Cursor.h" 5919cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#include "platform/DateTimeChooser.h" 601e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/FileChooser.h" 6109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/NotImplemented.h" 62bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "platform/PlatformScreen.h" 6376c265b59aa821ccbf8c75ab2bb0d036e97d2956Torne (Richard Coles)#include "platform/RuntimeEnabledFeatures.h" 6419cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles)#include "platform/exported/WrappedResourceRequest.h" 651e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/FloatRect.h" 661e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/IntRect.h" 67a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/GraphicsLayer.h" 6851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "platform/weborigin/SecurityOrigin.h" 695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/Platform.h" 7051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)#include "public/platform/WebCursorInfo.h" 715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebRect.h" 725267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebURLRequest.h" 73f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebAXObject.h" 74f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebAutofillClient.h" 75f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebColorChooser.h" 76f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebColorSuggestion.h" 77f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebConsoleMessage.h" 78f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebFrameClient.h" 79f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebInputElement.h" 80f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebInputEvent.h" 81f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebKit.h" 82f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebNode.h" 83f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPlugin.h" 84f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPopupMenuInfo.h" 85f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebSettings.h" 86f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebTextDirection.h" 87a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "public/web/WebTouchAction.h" 88f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebUserGestureIndicator.h" 89f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebUserGestureToken.h" 90f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebViewClient.h" 91f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebWindowFeatures.h" 92f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/ColorChooserPopupUIController.h" 93f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/ColorChooserUIController.h" 94f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/DateTimeChooserImpl.h" 95f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/ExternalDateTimeChooser.h" 96f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/ExternalPopupMenu.h" 97f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/PopupMenuChromium.h" 98f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebFileChooserCompletionImpl.h" 99f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebInputEventConversion.h" 100f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebLocalFrameImpl.h" 101f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPluginContainerImpl.h" 102f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPopupMenuImpl.h" 103f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebSettingsImpl.h" 104f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebViewImpl.h" 105591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/CString.h" 106591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/StringBuilder.h" 107591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/StringConcatenate.h" 108591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/unicode/CharacterNames.h" 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace WebCore; 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)// Converts a WebCore::AXObjectCache::AXNotification to a blink::WebAXEvent 115c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)static WebAXEvent toWebAXEvent(AXObjectCache::AXNotification notification) 116c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 117c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) // These enums have the same values; enforced in AssertMatchingEnums.cpp. 118c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return static_cast<WebAXEvent>(notification); 119c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 120c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ChromeClientImpl::ChromeClientImpl(WebViewImpl* webView) 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_webView(webView) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_toolbarsVisible(true) 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_statusbarVisible(true) 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_scrollbarsVisible(true) 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_menubarVisible(true) 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_resizable(true) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_pagePopupDriver(webView) 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ChromeClientImpl::~ChromeClientImpl() 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void* ChromeClientImpl::webView() const 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<void*>(m_webView); 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::chromeDestroyed() 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Our lifetime is bound to the WebViewImpl. 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setWindowRect(const FloatRect& r) 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setWindowRect(IntRect(r)); 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FloatRect ChromeClientImpl::windowRect() 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebRect rect; 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect = m_webView->client()->rootWindowRect(); 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else { 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // These numbers will be fairly wrong. The window's x/y coordinates will 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // be the top left corner of the screen and the size will be the content 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // size instead of the window size. 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect.width = m_webView->size().width; 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect.height = m_webView->size().height; 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return FloatRect(rect); 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FloatRect ChromeClientImpl::pageRect() 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We hide the details of the window's border thickness from the web page by 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // simple re-using the window position here. So, from the point-of-view of 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // the web page, the window has no border. 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return windowRect(); 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::focus() 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->didFocus(); 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)bool ChromeClientImpl::canTakeFocus(FocusType) 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // For now the browser can always take focus if we're not running layout 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // tests. 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !layoutTestMode(); 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 18809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void ChromeClientImpl::takeFocus(FocusType type) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 19209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (type == FocusTypeBackward) 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->focusPrevious(); 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->focusNext(); 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::focusedNodeChanged(Node* node) 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->focusedNodeChanged(WebNode(node)); 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebURL focusURL; 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (node && node->isLink()) { 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This HitTestResult hack is the easiest way to get a link URL out of a 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // WebCore::Node. 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HitTestResult hitTest(IntPoint(0, 0)); 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This cast must be valid because of the isLink() check. 208926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) hitTest.setURLElement(toElement(node)); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hitTest.isLiveLink()) 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) focusURL = hitTest.absoluteLinkURL(); 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setKeyboardFocusURL(focusURL); 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 215d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::focusedFrameChanged(WebCore::LocalFrame* frame) 216d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 21710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(frame); 218d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (webframe && webframe->client()) 219d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) webframe->client()->frameFocused(); 220d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 221d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 222d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)Page* ChromeClientImpl::createWindow(LocalFrame* frame, const FrameLoadRequest& r, const WindowFeatures& features, 22351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) NavigationPolicy navigationPolicy, ShouldSendReferrer shouldSendReferrer) 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 228591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebNavigationPolicy policy = static_cast<WebNavigationPolicy>(navigationPolicy); 229591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (policy == WebNavigationPolicyIgnore) 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) policy = getNavigationPolicy(); 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 232d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ASSERT(frame->document()); 233d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) DocumentFullscreen::webkitCancelFullScreen(*frame->document()); 234bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 235c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) WebViewImpl* newView = toWebViewImpl( 23610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_webView->client()->createView(WebLocalFrameImpl::fromFrame(frame), WrappedResourceRequest(r.resourceRequest()), features, r.frameName(), policy, shouldSendReferrer == NeverSendReferrer)); 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!newView) 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return newView->page(); 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 242591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochstatic inline void updatePolicyForEvent(const WebInputEvent* inputEvent, NavigationPolicy* policy) 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!inputEvent || inputEvent->type != WebInputEvent::MouseUp) 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const WebMouseEvent* mouseEvent = static_cast<const WebMouseEvent*>(inputEvent); 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned short buttonNumber; 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (mouseEvent->button) { 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebMouseEvent::ButtonLeft: 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) buttonNumber = 0; 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebMouseEvent::ButtonMiddle: 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) buttonNumber = 1; 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebMouseEvent::ButtonRight: 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) buttonNumber = 2; 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool ctrl = mouseEvent->modifiers & WebMouseEvent::ControlKey; 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shift = mouseEvent->modifiers & WebMouseEvent::ShiftKey; 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool alt = mouseEvent->modifiers & WebMouseEvent::AltKey; 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool meta = mouseEvent->modifiers & WebMouseEvent::MetaKey; 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 268591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch NavigationPolicy userPolicy = *policy; 269591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch navigationPolicyFromMouseEvent(buttonNumber, ctrl, shift, alt, meta, &userPolicy); 270926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // User and app agree that we want a new window; let the app override the decorations. 271591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (userPolicy == NavigationPolicyNewWindow && *policy == NavigationPolicyNewPopup) 272926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 273926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *policy = userPolicy; 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebNavigationPolicy ChromeClientImpl::getNavigationPolicy() 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If our default configuration was modified by a script or wasn't 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // created by a user gesture, then show as a popup. Else, let this 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // new window be opened as a toplevel window. 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool asPopup = !m_toolbarsVisible 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || !m_statusbarVisible 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || !m_scrollbarsVisible 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || !m_menubarVisible 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || !m_resizable; 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 287591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch NavigationPolicy policy = NavigationPolicyNewForegroundTab; 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (asPopup) 289591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch policy = NavigationPolicyNewPopup; 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updatePolicyForEvent(WebViewImpl::currentInputEvent(), &policy); 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 292591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return static_cast<WebNavigationPolicy>(policy); 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 295591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochvoid ChromeClientImpl::show(NavigationPolicy navigationPolicy) 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 300591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebNavigationPolicy policy = static_cast<WebNavigationPolicy>(navigationPolicy); 301591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (policy == WebNavigationPolicyIgnore) 302591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch policy = getNavigationPolicy(); 303591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch m_webView->client()->show(policy); 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::canRunModal() 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !!m_webView->client(); 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::runModal() 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->runModal(); 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setToolbarsVisible(bool value) 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_toolbarsVisible = value; 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::toolbarsVisible() 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_toolbarsVisible; 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setStatusbarVisible(bool value) 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_statusbarVisible = value; 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::statusbarVisible() 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_statusbarVisible; 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setScrollbarsVisible(bool value) 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbarsVisible = value; 34010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webFrame = toWebLocalFrameImpl(m_webView->mainFrame()); 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webFrame) 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webFrame->setCanHaveScrollbars(value); 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::scrollbarsVisible() 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbarsVisible; 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setMenubarVisible(bool value) 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_menubarVisible = value; 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::menubarVisible() 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_menubarVisible; 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setResizable(bool value) 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_resizable = value; 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 365c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)bool ChromeClientImpl::shouldReportDetailedMessageForSource(const String& url) 366c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 36710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webframe = m_webView->mainFrameImpl(); 368a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch return webframe->client() && webframe->client()->shouldReportDetailedMessageForSource(url); 369c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 370c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 3716f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdochvoid ChromeClientImpl::addMessageToConsole(LocalFrame* localFrame, MessageSource source, MessageLevel level, const String& message, unsigned lineNumber, const String& sourceID, const String& stackTrace) 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 37310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* frame = WebLocalFrameImpl::fromFrame(localFrame); 3746f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (frame && frame->client()) { 3756f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch frame->client()->didAddMessageToConsole( 376aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch WebConsoleMessage(static_cast<WebConsoleMessage::Level>(level), message), 377aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch sourceID, 378aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch lineNumber, 379aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch stackTrace); 380aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::canRunBeforeUnloadConfirmPanel() 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !!m_webView->client(); 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 388d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)bool ChromeClientImpl::runBeforeUnloadConfirmPanel(const String& message, LocalFrame* frame) 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 39010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(frame); 3916f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 3926f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch bool isReload = false; 3936f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch WebDataSource* ds = webframe->provisionalDataSource(); 3946f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (ds) 3956f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch isReload = (ds->navigationType() == blink::WebNavigationTypeReload); 3966f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch 3976f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (webframe->client()) 3986f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch return webframe->client()->runModalBeforeUnloadDialog(isReload, message); 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::closeWindowSoon() 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make sure this Page can no longer be found by JS. 405d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) Page::ordinaryPages().remove(m_webView->page()); 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make sure that all loading is stopped. Ensures that JS stops executing! 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->mainFrame()->stopLoading(); 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->closeWidgetSoon(); 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 414d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)// Although a LocalFrame is passed in, we don't actually use it, since we 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// already know our own m_webView. 416d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::runJavaScriptAlert(LocalFrame* frame, const String& message) 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 41810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(frame); 4196f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (webframe->client()) { 4203c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch if (WebUserGestureIndicator::isProcessingUserGesture()) 4213c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch WebUserGestureIndicator::currentUserGestureToken().setJavascriptPrompt(); 4226f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch webframe->client()->runModalAlertDialog(message); 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// See comments for runJavaScriptAlert(). 427d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)bool ChromeClientImpl::runJavaScriptConfirm(LocalFrame* frame, const String& message) 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 42910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(frame); 4306f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (webframe->client()) { 4313c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch if (WebUserGestureIndicator::isProcessingUserGesture()) 4323c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch WebUserGestureIndicator::currentUserGestureToken().setJavascriptPrompt(); 4336f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch return webframe->client()->runModalConfirmDialog(message); 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// See comments for runJavaScriptAlert(). 439d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)bool ChromeClientImpl::runJavaScriptPrompt(LocalFrame* frame, 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String& message, 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String& defaultValue, 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String& result) 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 44410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(frame); 4456f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch if (webframe->client()) { 4463c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch if (WebUserGestureIndicator::isProcessingUserGesture()) 4473c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch WebUserGestureIndicator::currentUserGestureToken().setJavascriptPrompt(); 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebString actualValue; 4496f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch bool ok = webframe->client()->runModalPromptDialog( 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) message, 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) defaultValue, 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) &actualValue); 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (ok) 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = actualValue; 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ok; 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setStatusbarText(const String& message) 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setStatusText(message); 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 46653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)bool ChromeClientImpl::tabsToLinks() 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 46853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_webView->tabsToLinks(); 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntRect ChromeClientImpl::windowResizerRect() const 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect result; 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = m_webView->client()->windowResizerRect(); 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 47953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void ChromeClientImpl::invalidateContentsAndRootView(const IntRect& updateRect) 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (updateRect.isEmpty()) 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->invalidateRect(updateRect); 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void ChromeClientImpl::invalidateContentsForSlowScroll(const IntRect& updateRect) 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 48853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) invalidateContentsAndRootView(updateRect); 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::scheduleAnimation() 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->scheduleAnimation(); 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::scroll( 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const IntSize& scrollDelta, const IntRect& scrollRect, 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const IntRect& clipRect) 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->isAcceleratedCompositingActive()) { 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) { 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dx = scrollDelta.width(); 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dy = scrollDelta.height(); 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->didScrollRect(dx, dy, intersection(scrollRect, clipRect)); 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 506d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } else { 507d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_webView->scrollRootLayer(); 508d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntRect ChromeClientImpl::rootViewToScreen(const IntRect& rect) const 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect screenRect(rect); 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) { 5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebRect windowRect = m_webView->client()->windowRect(); 5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) screenRect.move(windowRect.x, windowRect.y); 5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return screenRect; 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 52353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebScreenInfo ChromeClientImpl::screenInfo() const 52453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 52553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_webView->client() ? m_webView->client()->screenInfo() : WebScreenInfo(); 52653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 52753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 528d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::contentsSizeChanged(LocalFrame* frame, const IntSize& size) const 5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->didChangeContentsSize(); 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 53210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webframe = WebLocalFrameImpl::fromFrame(frame); 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webframe->didChangeContentsSize(size); 534d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 535d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) frame->loader().restoreScrollPositionAndViewState(); 5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 53853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void ChromeClientImpl::deviceOrPageScaleFactorChanged() const 53953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 54053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_webView->deviceOrPageScaleFactorChanged(); 54153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 54253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 543d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::layoutUpdated(LocalFrame* frame) const 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 54510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_webView->layoutUpdated(WebLocalFrameImpl::fromFrame(frame)); 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::mouseDidMoveOverElement( 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const HitTestResult& result, unsigned modifierFlags) 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebURL url; 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Find out if the mouse is over a link, and if so, let our UI know... 556d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (result.isLiveLink() && !result.absoluteLinkURL().string().isEmpty()) { 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) url = result.absoluteLinkURL(); 558d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } else if (result.innerNonSharedNode() 559d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) && (isHTMLObjectElement(*result.innerNonSharedNode()) 560d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) || isHTMLEmbedElement(*result.innerNonSharedNode()))) { 5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* object = result.innerNonSharedNode()->renderer(); 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (object && object->isWidget()) { 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Widget* widget = toRenderWidget(object)->widget(); 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (widget && widget->isPluginContainer()) { 56509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WebPluginContainerImpl* plugin = toWebPluginContainerImpl(widget); 566926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) url = plugin->plugin()->linkAtPosition(result.roundedPointInInnerNodeFrame()); 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setMouseOverURL(url); 5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setToolTip(const String& tooltipText, TextDirection dir) 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebTextDirection textDirection = (dir == RTL) ? 5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebTextDirectionRightToLeft : 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebTextDirectionLeftToRight; 5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setToolTipText( 5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tooltipText, textDirection); 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5851e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)void ChromeClientImpl::dispatchViewportPropertiesDidChange(const ViewportDescription& description) const 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 587bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) m_webView->updatePageDefinedViewportConstraints(description); 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 590d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::print(LocalFrame* frame) 5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 59310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch m_webView->client()->printPage(WebLocalFrameImpl::fromFrame(frame)); 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5966f543c786fc42989f552b4daa774ca5ff32fa697Ben MurdochPassOwnPtr<ColorChooser> ChromeClientImpl::createColorChooser(LocalFrame* frame, ColorChooserClient* chooserClient, const Color&) 5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 598926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) OwnPtr<ColorChooserUIController> controller; 59993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (RuntimeEnabledFeatures::pagePopupEnabled()) 6006f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch controller = adoptPtr(new ColorChooserPopupUIController(frame, this, chooserClient)); 60193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) else 6026f543c786fc42989f552b4daa774ca5ff32fa697Ben Murdoch controller = adoptPtr(new ColorChooserUIController(frame, chooserClient)); 603926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) controller->openUI(); 604926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return controller.release(); 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)PassRefPtrWillBeRawPtr<DateTimeChooser> ChromeClientImpl::openDateTimeChooser(DateTimeChooserClient* pickerClient, const DateTimeChooserParameters& parameters) 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return DateTimeChooserImpl::create(this, pickerClient, parameters); 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#else 612926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return ExternalDateTimeChooser::create(this, m_webView->client(), pickerClient, parameters); 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 616d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::runOpenPanel(LocalFrame* frame, PassRefPtr<FileChooser> fileChooser) 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebViewClient* client = m_webView->client(); 6195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!client) 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFileChooserParams params; 6235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.multiSelect = fileChooser->settings().allowsMultipleFiles; 6245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.directory = fileChooser->settings().allowsDirectoryUpload; 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.acceptTypes = fileChooser->settings().acceptTypes(); 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.selectedFiles = fileChooser->settings().selectedFiles; 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (params.selectedFiles.size() > 0) 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.initialValue = params.selectedFiles[0]; 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(MEDIA_CAPTURE) 630e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch params.useMediaCapture = fileChooser->settings().useMediaCapture; 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFileChooserCompletionImpl* chooserCompletion = 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) new WebFileChooserCompletionImpl(fileChooser); 6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (client->runFileChooser(params, chooserCompletion)) 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Choosing failed, so do callback with an empty list. 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) chooserCompletion->didChooseFile(WebVector<WebString>()); 6405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::enumerateChosenDirectory(FileChooser* fileChooser) 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebViewClient* client = m_webView->client(); 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!client) 6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFileChooserCompletionImpl* chooserCompletion = 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) new WebFileChooserCompletionImpl(fileChooser); 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(fileChooser && fileChooser->settings().selectedFiles.size()); 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If the enumeration can't happen, call the callback with an empty list. 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!client->enumerateChosenDirectory(fileChooser->settings().selectedFiles[0], chooserCompletion)) 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) chooserCompletion->didChooseFile(WebVector<WebString>()); 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setCursor(const WebCore::Cursor& cursor) 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setCursor(WebCursorInfo(cursor)); 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setCursor(const WebCursorInfo& cursor) 6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6658abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#if OS(MACOSX) 666926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // On Mac the mousemove event propagates to both the popup and main window. 667926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // If a popup is open we don't want the main window to change the cursor. 668926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_webView->hasOpenedPopup()) 669926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 670926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#endif 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->didChangeCursor(cursor); 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setCursorForPlugin(const WebCursorInfo& cursor) 6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setCursor(cursor); 6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 680bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)void ChromeClientImpl::postAccessibilityNotification(AXObject* obj, AXObjectCache::AXNotification notification) 6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Alert assistive technology about the accessibility object notification. 683c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) if (!obj) 684c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return; 68509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_webView->client()) 68609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_webView->client()->postAccessibilityEvent(WebAXObject(obj), toWebAXEvent(notification)); 6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 689521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)String ChromeClientImpl::acceptLanguages() 690521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles){ 691521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return m_webView->client()->acceptLanguages(); 692521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)} 693521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::paintCustomOverhangArea(GraphicsContext* context, const IntRect& horizontalOverhangArea, const IntRect& verticalOverhangArea, const IntRect& dirtyRect) 6955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 696d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) LocalFrame* frame = m_webView->mainFrameImpl()->frame(); 69710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebPluginContainerImpl* pluginContainer = WebLocalFrameImpl::pluginContainerFromFrame(frame); 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pluginContainer) 6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return pluginContainer->paintCustomOverhangArea(context, horizontalOverhangArea, verticalOverhangArea, dirtyRect); 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 703926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)GraphicsLayerFactory* ChromeClientImpl::graphicsLayerFactory() const 704926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 705926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_webView->graphicsLayerFactory(); 706926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 707926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 708d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::attachRootGraphicsLayer(GraphicsLayer* rootLayer) 7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 710d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_webView->setRootGraphicsLayer(rootLayer); 7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::enterFullScreenForElement(Element* element) 7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->enterFullScreenForElement(element); 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::exitFullScreenForElement(Element* element) 7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->exitFullScreenForElement(element); 7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::hasOpenedPopup() const 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webView->hasOpenedPopup(); 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 728d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)PassRefPtr<PopupMenu> ChromeClientImpl::createPopupMenu(LocalFrame& frame, PopupMenuClient* client) const 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (WebViewImpl::useExternalPopupMenus()) 73109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return adoptRef(new ExternalPopupMenu(frame, client, *m_webView)); 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 73393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return adoptRef(new PopupMenuChromium(frame, client)); 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PagePopup* ChromeClientImpl::openPagePopup(PagePopupClient* client, const IntRect& originBoundsInRootView) 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_pagePopupDriver); 7395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_pagePopupDriver->openPagePopup(client, originBoundsInRootView); 7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::closePagePopup(PagePopup* popup) 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_pagePopupDriver); 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_pagePopupDriver->closePagePopup(popup); 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setPagePopupDriver(PagePopupDriver* driver) 7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(driver); 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_pagePopupDriver = driver; 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::resetPagePopupDriver() 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_pagePopupDriver = m_webView; 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 759e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)bool ChromeClientImpl::shouldRunModalDialogDuringPageDismissal(const DialogType& dialogType, const String& dialogMessage, Document::PageDismissalType dismissalType) const 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const char* kDialogs[] = {"alert", "confirm", "prompt", "showModalDialog"}; 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dialog = static_cast<int>(dialogType); 763926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT_WITH_SECURITY_IMPLICATION(0 <= dialog && dialog < static_cast<int>(arraysize(kDialogs))); 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const char* kDismissals[] = {"beforeunload", "pagehide", "unload"}; 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dismissal = static_cast<int>(dismissalType) - 1; // Exclude NoDismissal. 767926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT_WITH_SECURITY_IMPLICATION(0 <= dismissal && dismissal < static_cast<int>(arraysize(kDismissals))); 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 76951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) blink::Platform::current()->histogramEnumeration("Renderer.ModalDialogsDuringPageDismissal", dismissal * arraysize(kDialogs) + dialog, arraysize(kDialogs) * arraysize(kDismissals)); 7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 77193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) String message = String("Blocked ") + kDialogs[dialog] + "('" + dialogMessage + "') during " + kDismissals[dismissal] + "."; 77293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) m_webView->mainFrame()->addMessageToConsole(WebConsoleMessage(WebConsoleMessage::LevelError, message)); 7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::needTouchEvents(bool needsTouchEvents) 7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->hasTouchEventHandlers(needsTouchEvents); 7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 782a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void ChromeClientImpl::setTouchAction(TouchAction touchAction) 783a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 784a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) if (WebViewClient* client = m_webView->client()) { 785a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) WebTouchAction webTouchAction = static_cast<WebTouchAction>(touchAction); 786a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) client->setTouchAction(webTouchAction); 787a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) } 788a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 789a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::requestPointerLock() 7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webView->requestPointerLock(); 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::requestPointerUnlock() 7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webView->requestPointerUnlock(); 7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::annotatedRegionsChanged() 8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebViewClient* client = m_webView->client(); 8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (client) 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) client->draggableRegionsChanged(); 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 807d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void ChromeClientImpl::didAssociateFormControls(const WillBeHeapVector<RefPtrWillBeMember<Element> >& elements) 808926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 809d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (m_webView->autofillClient()) 810d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) m_webView->autofillClient()->didAssociateFormControls(elements); 811926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 812926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 81351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void ChromeClientImpl::didCancelCompositionOnSelectionChange() 81451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 81551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (m_webView->client()) 81651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_webView->client()->didCancelCompositionOnSelectionChange(); 81751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 81851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 81951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void ChromeClientImpl::willSetInputMethodState() 82051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 82151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (m_webView->client()) 82251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_webView->client()->resetInputMethod(); 82351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 82451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 825a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdochvoid ChromeClientImpl::didUpdateTextOfFocusedElementByNonUserInput() 826a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch{ 827a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch if (m_webView->client()) 828a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch m_webView->client()->didUpdateTextOfFocusedElementByNonUserInput(); 829a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch} 830a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch 83151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void ChromeClientImpl::handleKeyboardEventOnTextField(HTMLInputElement& inputElement, KeyboardEvent& event) 83251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 83351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (!m_webView->autofillClient()) 83451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return; 83551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_webView->autofillClient()->textFieldDidReceiveKeyDown(WebInputElement(&inputElement), WebKeyboardEventBuilder(event)); 83651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 83751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 83809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// FIXME: Remove this code once we have input routing in the browser 83909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)// process. See http://crbug.com/339659. 84009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void ChromeClientImpl::forwardInputEvent( 841a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch WebCore::Frame* frame, WebCore::Event* event) 84209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 84310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch WebLocalFrameImpl* webFrame = WebLocalFrameImpl::fromFrame(toLocalFrameTemporary(frame)); 84409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 84509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // This is only called when we have out-of-process iframes, which 84609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // need to forward input events across processes. 84709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // FIXME: Add a check for out-of-process iframes enabled. 84809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (event->isKeyboardEvent()) { 84909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WebKeyboardEventBuilder webEvent(*static_cast<WebCore::KeyboardEvent*>(event)); 85009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webFrame->client()->forwardInputEvent(&webEvent); 85109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } else if (event->isMouseEvent()) { 852a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch WebMouseEventBuilder webEvent(webFrame->frameView(), frame->ownerRenderer(), *static_cast<WebCore::MouseEvent*>(event)); 85309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // Internal Blink events should not be forwarded. 85409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (webEvent.type == WebInputEvent::Undefined) 85509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 85609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 85709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webFrame->client()->forwardInputEvent(&webEvent); 85809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } else if (event->isWheelEvent()) { 859a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch WebMouseWheelEventBuilder webEvent(webFrame->frameView(), frame->ownerRenderer(), *static_cast<WebCore::WheelEvent*>(event)); 86009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (webEvent.type == WebInputEvent::Undefined) 86109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 86209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) webFrame->client()->forwardInputEvent(&webEvent); 86309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 86409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 86509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 866d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void ChromeClientImpl::didChangeValueInTextField(HTMLFormControlElement& element) 867d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 868d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (!m_webView->autofillClient()) 869d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return; 870d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) m_webView->autofillClient()->textFieldDidChange(WebFormControlElement(&element)); 871d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 872d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 87351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void ChromeClientImpl::didEndEditingOnTextField(HTMLInputElement& inputElement) 87451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 87551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (m_webView->autofillClient()) 87651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_webView->autofillClient()->textFieldDidEndEditing(WebInputElement(&inputElement)); 87709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 87851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 87909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void ChromeClientImpl::openTextDataListChooser(HTMLInputElement& input) 88009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 88109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (m_webView->autofillClient()) 88209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) m_webView->autofillClient()->openTextDataListChooser(WebInputElement(&input)); 88351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 88451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 88551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 886