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" 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "ChromeClientImpl.h" 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 35926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#include "ColorChooserPopupUIController.h" 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "ColorChooserUIController.h" 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "DateTimeChooserImpl.h" 38926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#include "ExternalDateTimeChooser.h" 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "ExternalPopupMenu.h" 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "HTMLNames.h" 4193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "PopupContainer.h" 4293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "PopupMenuChromium.h" 4393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)#include "RuntimeEnabledFeatures.h" 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "WebAccessibilityObject.h" 45926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#include "WebAutofillClient.h" 46e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebColorChooser.h" 47e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebConsoleMessage.h" 48e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebCursorInfo.h" 49e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebFileChooserCompletionImpl.h" 50e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebFrameClient.h" 51e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebFrameImpl.h" 52e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebInputElement.h" 53e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebInputEvent.h" 54e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebKit.h" 55e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebNode.h" 56e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebPasswordGeneratorClient.h" 57e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebPlugin.h" 58e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebPluginContainerImpl.h" 59e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebPopupMenuImpl.h" 60e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebPopupMenuInfo.h" 61e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebPopupType.h" 62e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebSettings.h" 63e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebSettingsImpl.h" 64e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebTextDirection.h" 65e6d4491e48613634a83c1957c72759da80987961Ben Murdoch#include "WebUserGestureIndicator.h" 66e6d4491e48613634a83c1957c72759da80987961Ben Murdoch#include "WebUserGestureToken.h" 67e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebViewClient.h" 68e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebViewImpl.h" 69e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "WebWindowFeatures.h" 7053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "bindings/v8/ScriptController.h" 71e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/accessibility/AXObjectCache.h" 72e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/accessibility/AccessibilityObject.h" 7353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Document.h" 7453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Node.h" 7553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLInputElement.h" 7653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/DocumentLoader.h" 7753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/FrameLoadRequest.h" 7853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/loader/NavigationAction.h" 7953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Console.h" 8053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FrameView.h" 8153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Page.h" 8253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/PagePopupDriver.h" 8353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/Settings.h" 84e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/page/WindowFeatures.h" 85e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/platform/ColorChooser.h" 86e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/platform/ColorChooserClient.h" 8753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/Cursor.h" 8853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/DateTimeChooser.h" 8953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/FileChooser.h" 9053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/PlatformScreen.h" 91e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/platform/chromium/support/WrappedResourceRequest.h" 9253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/graphics/FloatRect.h" 935267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "core/platform/graphics/GraphicsLayer.h" 9453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/graphics/IntRect.h" 9553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/HitTestResult.h" 9653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderWidget.h" 9753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/geolocation/Geolocation.h" 985267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/Platform.h" 995267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebRect.h" 1005267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebURLRequest.h" 101e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "weborigin/SecurityOrigin.h" 102591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/CString.h" 103591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/StringBuilder.h" 104591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/StringConcatenate.h" 105591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/unicode/CharacterNames.h" 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace WebCore; 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebKit { 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Converts a WebCore::PopupContainerType to a WebKit::WebPopupType. 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static WebPopupType convertPopupType(PopupContainer::PopupType type) 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (type) { 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PopupContainer::Select: 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebPopupTypeSelect; 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PopupContainer::Suggestion: 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebPopupTypeSuggestion; 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebPopupTypeNone; 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Converts a WebCore::AXObjectCache::AXNotification to a WebKit::WebAccessibilityNotification 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)static WebAccessibilityNotification toWebAccessibilityNotification(AXObjectCache::AXNotification notification) 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // These enums have the same values; enforced in AssertMatchingEnums.cpp. 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<WebAccessibilityNotification>(notification); 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ChromeClientImpl::ChromeClientImpl(WebViewImpl* webView) 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_webView(webView) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_toolbarsVisible(true) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_statusbarVisible(true) 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_scrollbarsVisible(true) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_menubarVisible(true) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_resizable(true) 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_pagePopupDriver(webView) 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ChromeClientImpl::~ChromeClientImpl() 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void* ChromeClientImpl::webView() const 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<void*>(m_webView); 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::chromeDestroyed() 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Our lifetime is bound to the WebViewImpl. 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setWindowRect(const FloatRect& r) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setWindowRect(IntRect(r)); 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FloatRect ChromeClientImpl::windowRect() 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebRect rect; 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect = m_webView->client()->rootWindowRect(); 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else { 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // These numbers will be fairly wrong. The window's x/y coordinates will 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // be the top left corner of the screen and the size will be the content 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // size instead of the window size. 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect.width = m_webView->size().width; 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect.height = m_webView->size().height; 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return FloatRect(rect); 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)FloatRect ChromeClientImpl::pageRect() 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We hide the details of the window's border thickness from the web page by 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // simple re-using the window position here. So, from the point-of-view of 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // the web page, the window has no border. 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return windowRect(); 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::focus() 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->didFocus(); 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::unfocus() 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->didBlur(); 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::canTakeFocus(FocusDirection) 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // For now the browser can always take focus if we're not running layout 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // tests. 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !layoutTestMode(); 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::takeFocus(FocusDirection direction) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (direction == FocusDirectionBackward) 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->focusPrevious(); 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->focusNext(); 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::focusedNodeChanged(Node* node) 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->focusedNodeChanged(WebNode(node)); 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebURL focusURL; 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (node && node->isLink()) { 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This HitTestResult hack is the easiest way to get a link URL out of a 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // WebCore::Node. 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HitTestResult hitTest(IntPoint(0, 0)); 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This cast must be valid because of the isLink() check. 225926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) hitTest.setURLElement(toElement(node)); 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hitTest.isLiveLink()) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) focusURL = hitTest.absoluteLinkURL(); 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setKeyboardFocusURL(focusURL); 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Page* ChromeClientImpl::createWindow( 233591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch Frame* frame, const FrameLoadRequest& r, const WindowFeatures& features, const NavigationAction& action, NavigationPolicy navigationPolicy) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 238591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebNavigationPolicy policy = static_cast<WebNavigationPolicy>(navigationPolicy); 239591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (policy == WebNavigationPolicyIgnore) 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) policy = getNavigationPolicy(); 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WrappedResourceRequest request; 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!r.resourceRequest().isEmpty()) 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) request.bind(r.resourceRequest()); 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (!action.resourceRequest().isEmpty()) 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) request.bind(action.resourceRequest()); 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebViewImpl* newView = static_cast<WebViewImpl*>( 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->createView(WebFrameImpl::fromFrame(frame), request, features, r.frameName(), policy)); 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!newView) 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return newView->page(); 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 254591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochstatic inline void updatePolicyForEvent(const WebInputEvent* inputEvent, NavigationPolicy* policy) 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!inputEvent || inputEvent->type != WebInputEvent::MouseUp) 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const WebMouseEvent* mouseEvent = static_cast<const WebMouseEvent*>(inputEvent); 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned short buttonNumber; 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (mouseEvent->button) { 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebMouseEvent::ButtonLeft: 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) buttonNumber = 0; 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebMouseEvent::ButtonMiddle: 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) buttonNumber = 1; 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebMouseEvent::ButtonRight: 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) buttonNumber = 2; 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool ctrl = mouseEvent->modifiers & WebMouseEvent::ControlKey; 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shift = mouseEvent->modifiers & WebMouseEvent::ShiftKey; 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool alt = mouseEvent->modifiers & WebMouseEvent::AltKey; 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool meta = mouseEvent->modifiers & WebMouseEvent::MetaKey; 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 280591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch NavigationPolicy userPolicy = *policy; 281591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch navigationPolicyFromMouseEvent(buttonNumber, ctrl, shift, alt, meta, &userPolicy); 282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // User and app agree that we want a new window; let the app override the decorations. 283591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (userPolicy == NavigationPolicyNewWindow && *policy == NavigationPolicyNewPopup) 284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) *policy = userPolicy; 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebNavigationPolicy ChromeClientImpl::getNavigationPolicy() 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If our default configuration was modified by a script or wasn't 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // created by a user gesture, then show as a popup. Else, let this 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // new window be opened as a toplevel window. 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool asPopup = !m_toolbarsVisible 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || !m_statusbarVisible 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || !m_scrollbarsVisible 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || !m_menubarVisible 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || !m_resizable; 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 299591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch NavigationPolicy policy = NavigationPolicyNewForegroundTab; 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (asPopup) 301591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch policy = NavigationPolicyNewPopup; 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) updatePolicyForEvent(WebViewImpl::currentInputEvent(), &policy); 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 304591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch return static_cast<WebNavigationPolicy>(policy); 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 307591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochvoid ChromeClientImpl::show(NavigationPolicy navigationPolicy) 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 312591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch WebNavigationPolicy policy = static_cast<WebNavigationPolicy>(navigationPolicy); 313591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (policy == WebNavigationPolicyIgnore) 314591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch policy = getNavigationPolicy(); 315591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch m_webView->client()->show(policy); 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::canRunModal() 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !!m_webView->client(); 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::runModal() 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->runModal(); 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setToolbarsVisible(bool value) 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_toolbarsVisible = value; 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::toolbarsVisible() 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_toolbarsVisible; 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setStatusbarVisible(bool value) 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_statusbarVisible = value; 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::statusbarVisible() 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_statusbarVisible; 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setScrollbarsVisible(bool value) 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbarsVisible = value; 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFrameImpl* webFrame = static_cast<WebFrameImpl*>(m_webView->mainFrame()); 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webFrame) 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webFrame->setCanHaveScrollbars(value); 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::scrollbarsVisible() 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbarsVisible; 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setMenubarVisible(bool value) 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_menubarVisible = value; 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::menubarVisible() 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_menubarVisible; 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setResizable(bool value) 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_resizable = value; 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::addMessageToConsole(MessageSource source, 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MessageLevel level, 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String& message, 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned lineNumber, 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String& sourceID) 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) { 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->didAddMessageToConsole( 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebConsoleMessage(static_cast<WebConsoleMessage::Level>(level), message), 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) sourceID, 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) lineNumber); 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::canRunBeforeUnloadConfirmPanel() 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !!m_webView->client(); 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::runBeforeUnloadConfirmPanel(const String& message, Frame* frame) 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) { 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webView->client()->runModalBeforeUnloadDialog( 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFrameImpl::fromFrame(frame), message); 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::closeWindowSoon() 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make sure this Page can no longer be found by JS. 40853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_webView->page()->clearPageGroup(); 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Make sure that all loading is stopped. Ensures that JS stops executing! 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->mainFrame()->stopLoading(); 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->closeWidgetSoon(); 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Although a Frame is passed in, we don't actually use it, since we 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// already know our own m_webView. 4195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::runJavaScriptAlert(Frame* frame, const String& message) 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) { 422e6d4491e48613634a83c1957c72759da80987961Ben Murdoch if (WebUserGestureIndicator::isProcessingUserGesture()) 423e6d4491e48613634a83c1957c72759da80987961Ben Murdoch WebUserGestureIndicator::currentUserGestureToken().setJavascriptPrompt(); 4245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->runModalAlertDialog( 4255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFrameImpl::fromFrame(frame), message); 4265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// See comments for runJavaScriptAlert(). 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::runJavaScriptConfirm(Frame* frame, const String& message) 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) { 433e6d4491e48613634a83c1957c72759da80987961Ben Murdoch if (WebUserGestureIndicator::isProcessingUserGesture()) 434e6d4491e48613634a83c1957c72759da80987961Ben Murdoch WebUserGestureIndicator::currentUserGestureToken().setJavascriptPrompt(); 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webView->client()->runModalConfirmDialog( 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFrameImpl::fromFrame(frame), message); 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// See comments for runJavaScriptAlert(). 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::runJavaScriptPrompt(Frame* frame, 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String& message, 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String& defaultValue, 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String& result) 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) { 448e6d4491e48613634a83c1957c72759da80987961Ben Murdoch if (WebUserGestureIndicator::isProcessingUserGesture()) 449e6d4491e48613634a83c1957c72759da80987961Ben Murdoch WebUserGestureIndicator::currentUserGestureToken().setJavascriptPrompt(); 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebString actualValue; 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool ok = m_webView->client()->runModalPromptDialog( 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFrameImpl::fromFrame(frame), 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) message, 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) defaultValue, 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) &actualValue); 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (ok) 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = actualValue; 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ok; 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setStatusbarText(const String& message) 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setStatusText(message); 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 46953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)bool ChromeClientImpl::tabsToLinks() 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 47153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_webView->tabsToLinks(); 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntRect ChromeClientImpl::windowResizerRect() const 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect result; 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) result = m_webView->client()->windowResizerRect(); 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return result; 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void ChromeClientImpl::invalidateContentsAndRootView(const IntRect& updateRect) 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (updateRect.isEmpty()) 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->invalidateRect(updateRect); 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void ChromeClientImpl::invalidateContentsForSlowScroll(const IntRect& updateRect) 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 49153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) invalidateContentsAndRootView(updateRect); 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::scheduleAnimation() 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->scheduleAnimation(); 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::scroll( 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const IntSize& scrollDelta, const IntRect& scrollRect, 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const IntRect& clipRect) 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->isAcceleratedCompositingActive()) { 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) { 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dx = scrollDelta.width(); 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dy = scrollDelta.height(); 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->didScrollRect(dx, dy, intersection(scrollRect, clipRect)); 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->scrollRootLayerRect(scrollDelta, clipRect); 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint ChromeClientImpl::screenToRootView(const IntPoint& point) const 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntPoint windowPoint(point); 5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) { 5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebRect windowRect = m_webView->client()->windowRect(); 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) windowPoint.move(-windowRect.x, -windowRect.y); 5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return windowPoint; 5235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntRect ChromeClientImpl::rootViewToScreen(const IntRect& rect) const 5265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect screenRect(rect); 5285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) { 5305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebRect windowRect = m_webView->client()->windowRect(); 5315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) screenRect.move(windowRect.x, windowRect.y); 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return screenRect; 5355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 53753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)WebScreenInfo ChromeClientImpl::screenInfo() const 53853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 53953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return m_webView->client() ? m_webView->client()->screenInfo() : WebScreenInfo(); 54053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 54153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::contentsSizeChanged(Frame* frame, const IntSize& size) const 5435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->didChangeContentsSize(); 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFrameImpl* webframe = WebFrameImpl::fromFrame(frame); 5475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webframe->didChangeContentsSize(size); 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webframe->client()) 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webframe->client()->didChangeContentsSize(webframe, size); 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 55253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void ChromeClientImpl::deviceOrPageScaleFactorChanged() const 55353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 55453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_webView->deviceOrPageScaleFactorChanged(); 55553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 55653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 55753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void ChromeClientImpl::didProgrammaticallyScroll(Frame* frame, const IntPoint& scrollPoint) const 55853e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles){ 55953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) ASSERT(frame->view()->inProgrammaticScroll()); 56053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (frame->page()->mainFrame() == frame) 56153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_webView->didProgrammaticallyScroll(scrollPoint); 56253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)} 56353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::layoutUpdated(Frame* frame) const 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->layoutUpdated(WebFrameImpl::fromFrame(frame)); 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::mouseDidMoveOverElement( 5705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const HitTestResult& result, unsigned modifierFlags) 5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebURL url; 5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Find out if the mouse is over a link, and if so, let our UI know... 5775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (result.isLiveLink() && !result.absoluteLinkURL().string().isEmpty()) 5785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) url = result.absoluteLinkURL(); 5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (result.innerNonSharedNode() 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && (result.innerNonSharedNode()->hasTagName(HTMLNames::objectTag) 5815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || result.innerNonSharedNode()->hasTagName(HTMLNames::embedTag))) { 5825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* object = result.innerNonSharedNode()->renderer(); 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (object && object->isWidget()) { 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Widget* widget = toRenderWidget(object)->widget(); 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (widget && widget->isPluginContainer()) { 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginContainerImpl* plugin = static_cast<WebPluginContainerImpl*>(widget); 587926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) url = plugin->plugin()->linkAtPosition(result.roundedPointInInnerNodeFrame()); 5885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setMouseOverURL(url); 5935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setToolTip(const String& tooltipText, TextDirection dir) 5965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 5985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 5995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebTextDirection textDirection = (dir == RTL) ? 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebTextDirectionRightToLeft : 6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebTextDirectionLeftToRight; 6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->setToolTipText( 6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tooltipText, textDirection); 6045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::dispatchViewportPropertiesDidChange(const ViewportArguments& arguments) const 6075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 60893ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) m_webView->updatePageDefinedPageScaleConstraints(arguments); 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::print(Frame* frame) 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->printPage(WebFrameImpl::fromFrame(frame)); 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassOwnPtr<ColorChooser> ChromeClientImpl::createColorChooser(ColorChooserClient* chooserClient, const Color&) 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 619926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) OwnPtr<ColorChooserUIController> controller; 62093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) if (RuntimeEnabledFeatures::pagePopupEnabled()) 62193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) controller = adoptPtr(new ColorChooserPopupUIController(this, chooserClient)); 62293ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) else 62393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) controller = adoptPtr(new ColorChooserUIController(this, chooserClient)); 624926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) controller->openUI(); 625926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return controller.release(); 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassOwnPtr<WebColorChooser> ChromeClientImpl::createWebColorChooser(WebColorChooserClient* chooserClient, const WebColor& initialColor) 6285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebViewClient* client = m_webView->client(); 6305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!client) 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return nullptr; 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptPtr(client->createColorChooser(chooserClient, initialColor)); 6335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassRefPtr<DateTimeChooser> ChromeClientImpl::openDateTimeChooser(DateTimeChooserClient* pickerClient, const DateTimeChooserParameters& parameters) 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(INPUT_MULTIPLE_FIELDS_UI) 6385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return DateTimeChooserImpl::create(this, pickerClient, parameters); 6395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#else 640926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return ExternalDateTimeChooser::create(this, m_webView->client(), pickerClient, parameters); 6415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 6425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::runOpenPanel(Frame* frame, PassRefPtr<FileChooser> fileChooser) 6455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebViewClient* client = m_webView->client(); 6475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!client) 6485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFileChooserParams params; 6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.multiSelect = fileChooser->settings().allowsMultipleFiles; 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.directory = fileChooser->settings().allowsDirectoryUpload; 6535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.acceptTypes = fileChooser->settings().acceptTypes(); 6545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.selectedFiles = fileChooser->settings().selectedFiles; 6555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (params.selectedFiles.size() > 0) 6565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) params.initialValue = params.selectedFiles[0]; 6575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(MEDIA_CAPTURE) 658e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch params.useMediaCapture = fileChooser->settings().useMediaCapture; 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFileChooserCompletionImpl* chooserCompletion = 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) new WebFileChooserCompletionImpl(fileChooser); 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (client->runFileChooser(params, chooserCompletion)) 6645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Choosing failed, so do callback with an empty list. 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) chooserCompletion->didChooseFile(WebVector<WebString>()); 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::enumerateChosenDirectory(FileChooser* fileChooser) 6715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebViewClient* client = m_webView->client(); 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!client) 6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 6755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFileChooserCompletionImpl* chooserCompletion = 6775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) new WebFileChooserCompletionImpl(fileChooser); 6785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(fileChooser && fileChooser->settings().selectedFiles.size()); 6805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If the enumeration can't happen, call the callback with an empty list. 6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!client->enumerateChosenDirectory(fileChooser->settings().selectedFiles[0], chooserCompletion)) 6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) chooserCompletion->didChooseFile(WebVector<WebString>()); 6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::popupOpened(PopupContainer* popupContainer, 6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const IntRect& bounds, 6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool handleExternally) 6895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // For Autofill popups, if the popup will not be fully visible, we shouldn't 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // show it at all. Among other things, this prevents users from being able 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // to interact via the keyboard with an invisible popup. 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (popupContainer->popupType() == PopupContainer::Suggestion) { 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameView* view = m_webView->page()->mainFrame()->view(); 695926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) IntRect visibleRect = view->visibleContentRect(ScrollableArea::IncludeScrollbars); 6965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // |bounds| is in screen coordinates, so make sure to convert it to 6975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // content coordinates prior to comparing to |visibleRect|. 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect screenRect = bounds; 6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) screenRect.setLocation(view->screenToContents(bounds.location())); 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!visibleRect.contains(screenRect)) { 7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->hideAutofillPopup(); 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 7075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebWidget* webwidget; 7105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (handleExternally) { 7115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPopupMenuInfo popupInfo; 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) getPopupMenuInfo(popupContainer, &popupInfo); 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webwidget = m_webView->client()->createPopupMenu(popupInfo); 7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webwidget = m_webView->client()->createPopupMenu( 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) convertPopupType(popupContainer->popupType())); 7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We only notify when the WebView has to handle the popup, as when 7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // the popup is handled externally, the fact that a popup is showing is 7195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // transparent to the WebView. 7205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->popupOpened(popupContainer); 7215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 722926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) static_cast<WebPopupMenuImpl*>(webwidget)->initialize(popupContainer, bounds); 7235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::popupClosed(WebCore::PopupContainer* popupContainer) 7265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->popupClosed(popupContainer); 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setCursor(const WebCore::Cursor& cursor) 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setCursor(WebCursorInfo(cursor)); 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setCursor(const WebCursorInfo& cursor) 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 737926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#if OS(DARWIN) 738926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // On Mac the mousemove event propagates to both the popup and main window. 739926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // If a popup is open we don't want the main window to change the cursor. 740926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_webView->hasOpenedPopup()) 741926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 742926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#endif 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->didChangeCursor(cursor); 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setCursorForPlugin(const WebCursorInfo& cursor) 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setCursor(cursor); 7505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::formStateDidChange(const Node* node) 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_webView->client()) 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->didChangeFormState(WebNode(const_cast<Node*>(node))); 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The current history item is not updated yet. That happens lazily when 7585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // WebFrame::currentHistoryItem is requested. 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebFrameImpl* webframe = WebFrameImpl::fromFrame(node->document()->frame()); 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (webframe->client()) 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webframe->client()->didUpdateCurrentHistoryItem(webframe); 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::getPopupMenuInfo(PopupContainer* popupContainer, 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPopupMenuInfo* info) 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const Vector<PopupItem*>& inputItems = popupContainer->popupData(); 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebVector<WebMenuItemInfo> outputItems(inputItems.size()); 7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < inputItems.size(); ++i) { 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const PopupItem& inputItem = *inputItems[i]; 7735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebMenuItemInfo& outputItem = outputItems[i]; 7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) outputItem.label = inputItem.label; 7765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) outputItem.enabled = inputItem.enabled; 7775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (inputItem.textDirection == WebCore::RTL) 7785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) outputItem.textDirection = WebTextDirectionRightToLeft; 7795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 7805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) outputItem.textDirection = WebTextDirectionLeftToRight; 7815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) outputItem.hasTextDirectionOverride = inputItem.hasTextDirectionOverride; 7825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (inputItem.type) { 7845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PopupItem::TypeOption: 7855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) outputItem.type = WebMenuItemInfo::Option; 7865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 7875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PopupItem::TypeGroup: 7885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) outputItem.type = WebMenuItemInfo::Group; 7895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 7905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case PopupItem::TypeSeparator: 7915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) outputItem.type = WebMenuItemInfo::Separator; 7925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 7935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 7945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 7955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) info->itemHeight = popupContainer->menuItemHeight(); 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) info->itemFontSize = popupContainer->menuItemFontSize(); 8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) info->selectedIndex = popupContainer->selectedIndex(); 8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) info->items.swap(outputItems); 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) info->rightAligned = popupContainer->menuStyle().textDirection() == RTL; 8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::postAccessibilityNotification(AccessibilityObject* obj, AXObjectCache::AXNotification notification) 8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Alert assistive technology about the accessibility object notification. 8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (obj) 8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->postAccessibilityNotification(WebAccessibilityObject(obj), toWebAccessibilityNotification(notification)); 8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 812521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)String ChromeClientImpl::acceptLanguages() 813521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles){ 814521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) return m_webView->client()->acceptLanguages(); 815521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)} 816521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) 8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::paintCustomOverhangArea(GraphicsContext* context, const IntRect& horizontalOverhangArea, const IntRect& verticalOverhangArea, const IntRect& dirtyRect) 8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Frame* frame = m_webView->mainFrameImpl()->frame(); 8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginContainerImpl* pluginContainer = WebFrameImpl::pluginContainerFromFrame(frame); 8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (pluginContainer) 8225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return pluginContainer->paintCustomOverhangArea(context, horizontalOverhangArea, verticalOverhangArea, dirtyRect); 8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 826926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)GraphicsLayerFactory* ChromeClientImpl::graphicsLayerFactory() const 827926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 828926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_webView->graphicsLayerFactory(); 829926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 830926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::attachRootGraphicsLayer(Frame* frame, GraphicsLayer* graphicsLayer) 8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->setRootGraphicsLayer(graphicsLayer); 8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::scheduleCompositingLayerFlush() 8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->scheduleCompositingLayerSync(); 8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ChromeClient::CompositingTriggerFlags ChromeClientImpl::allowedCompositingTriggers() const 8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->allowsAcceleratedCompositing()) 8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CompositingTriggerFlags flags = 0; 8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Settings* settings = m_webView->page()->settings(); 8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (settings->acceleratedCompositingFor3DTransformsEnabled()) 8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) flags |= ThreeDTransformTrigger; 8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (settings->acceleratedCompositingForVideoEnabled()) 8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) flags |= VideoTrigger; 8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (settings->acceleratedCompositingForPluginsEnabled()) 8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) flags |= PluginTrigger; 8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (settings->acceleratedCompositingForAnimationEnabled()) 8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) flags |= AnimationTrigger; 8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (settings->acceleratedCompositingForCanvasEnabled()) 8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) flags |= CanvasTrigger; 858926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (settings->acceleratedCompositingForScrollableFramesEnabled()) 859926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) flags |= ScrollableInnerFrameTrigger; 860591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch if (settings->acceleratedCompositingForFiltersEnabled()) 861591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch flags |= FilterTrigger; 8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return flags; 8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::enterFullScreenForElement(Element* element) 8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->enterFullScreenForElement(element); 8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::exitFullScreenForElement(Element* element) 8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->exitFullScreenForElement(element); 8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::hasOpenedPopup() const 8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webView->hasOpenedPopup(); 8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 88193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)PassRefPtr<PopupMenu> ChromeClientImpl::createPopupMenu(Frame& frame, PopupMenuClient* client) const 8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (WebViewImpl::useExternalPopupMenus()) 88493ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return adoptRef(new ExternalPopupMenu(frame, client, m_webView->client())); 8855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 88693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return adoptRef(new PopupMenuChromium(frame, client)); 8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PagePopup* ChromeClientImpl::openPagePopup(PagePopupClient* client, const IntRect& originBoundsInRootView) 8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_pagePopupDriver); 8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_pagePopupDriver->openPagePopup(client, originBoundsInRootView); 8935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::closePagePopup(PagePopup* popup) 8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(m_pagePopupDriver); 8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_pagePopupDriver->closePagePopup(popup); 8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::setPagePopupDriver(PagePopupDriver* driver) 9025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(driver); 9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_pagePopupDriver = driver; 9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::resetPagePopupDriver() 9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_pagePopupDriver = m_webView; 9105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 912e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochbool ChromeClientImpl::isPasswordGenerationEnabled() const 9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 914e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return m_webView->passwordGeneratorClient(); 9155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 917e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochvoid ChromeClientImpl::openPasswordGenerator(HTMLInputElement* input) 9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 919e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch ASSERT(isPasswordGenerationEnabled()); 920e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch WebInputElement webInput(input); 921e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch m_webView->passwordGeneratorClient()->openPasswordGenerator(webInput); 9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::shouldRunModalDialogDuringPageDismissal(const DialogType& dialogType, const String& dialogMessage, FrameLoader::PageDismissalType dismissalType) const 9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const char* kDialogs[] = {"alert", "confirm", "prompt", "showModalDialog"}; 9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dialog = static_cast<int>(dialogType); 928926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT_WITH_SECURITY_IMPLICATION(0 <= dialog && dialog < static_cast<int>(arraysize(kDialogs))); 9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const char* kDismissals[] = {"beforeunload", "pagehide", "unload"}; 9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int dismissal = static_cast<int>(dismissalType) - 1; // Exclude NoDismissal. 932926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT_WITH_SECURITY_IMPLICATION(0 <= dismissal && dismissal < static_cast<int>(arraysize(kDismissals))); 9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebKit::Platform::current()->histogramEnumeration("Renderer.ModalDialogsDuringPageDismissal", dismissal * arraysize(kDialogs) + dialog, arraysize(kDialogs) * arraysize(kDismissals)); 9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 93693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) String message = String("Blocked ") + kDialogs[dialog] + "('" + dialogMessage + "') during " + kDismissals[dismissal] + "."; 93793ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) m_webView->mainFrame()->addMessageToConsole(WebConsoleMessage(WebConsoleMessage::LevelError, message)); 9385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 9405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::shouldRubberBandInDirection(WebCore::ScrollDirection direction) const 9435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(direction != WebCore::ScrollUp && direction != WebCore::ScrollDown); 9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_webView->client()) 9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 9485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (direction == WebCore::ScrollLeft) 9505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !m_webView->client()->historyBackListCount(); 9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (direction == WebCore::ScrollRight) 9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return !m_webView->client()->historyForwardListCount(); 9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT_NOT_REACHED(); 9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 9565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::numWheelEventHandlersChanged(unsigned numberOfWheelHandlers) 9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->numberOfWheelEventHandlersChanged(numberOfWheelHandlers); 9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::needTouchEvents(bool needsTouchEvents) 9645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->hasTouchEventHandlers(needsTouchEvents); 9665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::requestPointerLock() 9695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webView->requestPointerLock(); 9715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::requestPointerUnlock() 9745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webView->requestPointerUnlock(); 9765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ChromeClientImpl::isPointerLocked() 9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_webView->isPointerLocked(); 9815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ChromeClientImpl::annotatedRegionsChanged() 9845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 9855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebViewClient* client = m_webView->client(); 9865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (client) 9875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) client->draggableRegionsChanged(); 9885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 9895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 99053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)void ChromeClientImpl::didAssociateFormControls(const Vector<RefPtr<Element> >& elements) 991926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 992926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!m_webView->autofillClient()) 993926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 994926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebVector<WebNode> elementVector(static_cast<size_t>(elements.size())); 995926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) size_t elementsCount = elements.size(); 996926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (size_t i = 0; i < elementsCount; ++i) 997926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) elementVector[i] = elements[i]; 998926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_webView->autofillClient()->didAssociateFormControls(elementVector); 999926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1000926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 10015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#if ENABLE(NAVIGATOR_CONTENT_UTILS) 10025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)PassOwnPtr<NavigatorContentUtilsClientImpl> NavigatorContentUtilsClientImpl::create(WebViewImpl* webView) 10035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptPtr(new NavigatorContentUtilsClientImpl(webView)); 10055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)NavigatorContentUtilsClientImpl::NavigatorContentUtilsClientImpl(WebViewImpl* webView) 10085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_webView(webView) 10095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 10105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void NavigatorContentUtilsClientImpl::registerProtocolHandler(const String& scheme, const String& baseURL, const String& url, const String& title) 101302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch{ 10145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_webView->client()->registerProtocolHandler(scheme, baseURL, url, title); 101502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch} 10165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 10175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebKit 1019