18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2006, 2007, 2009 Apple Inc. All rights reserved.
3db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block * Copyright (C) 2008, 2010 Nokia Corporation and/or its subsidiary(-ies)
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h"
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Chrome.h"
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ChromeClient.h"
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "DNS.h"
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Document.h"
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FileList.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FloatRect.h"
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h"
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameTree.h"
318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "Geolocation.h"
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLFormElement.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLInputElement.h"
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HTMLNames.h"
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HitTestResult.h"
3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "InspectorInstrumentation.h"
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Page.h"
385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "PageGroupLoadDeferrer.h"
390bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "RenderObject.h"
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ResourceHandle.h"
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ScriptController.h"
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "SecurityOrigin.h"
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Settings.h"
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "WindowFeatures.h"
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/PassRefPtr.h>
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/RefPtr.h>
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/Vector.h>
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DOM_STORAGE)
500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#include "StorageNamespace.h"
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace HTMLNames;
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectusing namespace std;
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectChrome::Chrome(Page* page, ChromeClient* client)
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    : m_page(page)
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    , m_client(client)
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(m_client);
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectChrome::~Chrome()
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->chromeDestroyed();
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
70dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid Chrome::invalidateWindow(const IntRect& updateRect, bool immediate)
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
72dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    m_client->invalidateWindow(updateRect, immediate);
73dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
75dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid Chrome::invalidateContentsAndWindow(const IntRect& updateRect, bool immediate)
76dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
77dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    m_client->invalidateContentsAndWindow(updateRect, immediate);
78dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}
79dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block
80dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid Chrome::invalidateContentsForSlowScroll(const IntRect& updateRect, bool immediate)
81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    m_client->invalidateContentsForSlowScroll(updateRect, immediate);
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::scroll(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect)
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->scroll(scrollDelta, rectToScroll, clipRect);
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
9028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#if ENABLE(TILED_BACKING_STORE)
912bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid Chrome::delegatedScrollRequested(const IntPoint& scrollPoint)
9228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu{
932bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_client->delegatedScrollRequested(scrollPoint);
9428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu}
9528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif
9628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntPoint Chrome::screenToWindow(const IntPoint& point) const
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->screenToWindow(point);
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntRect Chrome::windowToScreen(const IntRect& rect) const
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->windowToScreen(rect);
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
107231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockPlatformPageClient Chrome::platformPageClient() const
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
109231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return m_client->platformPageClient();
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid Chrome::contentsSizeChanged(Frame* frame, const IntSize& size) const
113635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    m_client->contentsSizeChanged(frame, size);
115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
11721939df44de1705786c545cd1bf519d47250322dBen Murdochvoid Chrome::scrollRectIntoView(const IntRect& rect) const
118635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{
11921939df44de1705786c545cd1bf519d47250322dBen Murdoch    // FIXME: The unused ScrollView* argument can and should be removed from ChromeClient::scrollRectIntoView.
12021939df44de1705786c545cd1bf519d47250322dBen Murdoch    m_client->scrollRectIntoView(rect, 0);
121635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project}
122635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project
123231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid Chrome::scrollbarsModeDidChange() const
124231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
125231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    m_client->scrollbarsModeDidChange();
126231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
127231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::setWindowRect(const FloatRect& rect) const
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->setWindowRect(rect);
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFloatRect Chrome::windowRect() const
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->windowRect();
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFloatRect Chrome::pageRect() const
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->pageRect();
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1420bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectfloat Chrome::scaleFactor()
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->scaleFactor();
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1470bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::focus() const
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->focus();
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::unfocus() const
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->unfocus();
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Chrome::canTakeFocus(FocusDirection direction) const
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->canTakeFocus(direction);
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::takeFocus(FocusDirection direction) const
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->takeFocus(direction);
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
168643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid Chrome::focusedNodeChanged(Node* node) const
169643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{
170643ca7872b450ea4efacab6188849e5aac2ba161Steve Block    m_client->focusedNodeChanged(node);
171643ca7872b450ea4efacab6188849e5aac2ba161Steve Block}
172643ca7872b450ea4efacab6188849e5aac2ba161Steve Block
17328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuvoid Chrome::focusedFrameChanged(Frame* frame) const
17428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu{
17528040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    m_client->focusedFrameChanged(frame);
17628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu}
17728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
178e14391e94c850b8bd03680c23b38978db68687a8John ReckPage* Chrome::createWindow(Frame* frame, const FrameLoadRequest& request, const WindowFeatures& features, const NavigationAction& action) const
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
180e14391e94c850b8bd03680c23b38978db68687a8John Reck    Page* newPage = m_client->createWindow(frame, request, features, action);
1815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DOM_STORAGE)
1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (newPage) {
1840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        if (StorageNamespace* oldSessionStorage = m_page->sessionStorage(false))
1850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            newPage->setSessionStorage(oldSessionStorage->copy());
1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1885f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return newPage;
1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::show() const
1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->show();
1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Chrome::canRunModal() const
1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->canRunModal();
2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Chrome::canRunModalNow() const
2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // If loads are blocked, we can't run modal because the contents
2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // of the modal dialog will never show up!
2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return canRunModal() && !ResourceHandle::loadsBlocked();
2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::runModal() const
2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Defer callbacks in all the other pages in this group, so we don't try to run JavaScript
2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // in a way that could interact with this view.
2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PageGroupLoadDeferrer deferrer(m_page, false);
2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    TimerBase::fireTimersInNestedEventLoop();
2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->runModal();
2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::setToolbarsVisible(bool b) const
2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->setToolbarsVisible(b);
2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Chrome::toolbarsVisible() const
2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->toolbarsVisible();
2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::setStatusbarVisible(bool b) const
2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->setStatusbarVisible(b);
2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Chrome::statusbarVisible() const
2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->statusbarVisible();
2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::setScrollbarsVisible(bool b) const
2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->setScrollbarsVisible(b);
2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Chrome::scrollbarsVisible() const
2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->scrollbarsVisible();
2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::setMenubarVisible(bool b) const
2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->setMenubarVisible(b);
2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Chrome::menubarVisible() const
2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->menubarVisible();
2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::setResizable(bool b) const
2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->setResizable(b);
2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Chrome::canRunBeforeUnloadConfirmPanel()
2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->canRunBeforeUnloadConfirmPanel();
2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Chrome::runBeforeUnloadConfirmPanel(const String& message, Frame* frame)
2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Defer loads in case the client method runs a new event loop that would
2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // otherwise cause the load to continue while we're in the middle of executing JavaScript.
2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PageGroupLoadDeferrer deferrer(m_page, true);
2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->runBeforeUnloadConfirmPanel(message, frame);
2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::closeWindowSoon()
2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->closeWindowSoon();
2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic inline void willRunModalDialog(const Frame* frame, const ChromeClient::DialogType& dialogType, const ChromeClient* client)
2842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
2852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (frame->loader()->pageDismissalEventBeingDispatched())
2862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        client->willRunModalDialogDuringPageDismissal(dialogType);
2872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
2882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::runJavaScriptAlert(Frame* frame, const String& message)
2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
2912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    willRunModalDialog(frame, ChromeClient::AlertDialog, m_client);
2922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
2930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Defer loads in case the client method runs a new event loop that would
2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // otherwise cause the load to continue while we're in the middle of executing JavaScript.
2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PageGroupLoadDeferrer deferrer(m_page, true);
2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(frame);
298635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    m_client->runJavaScriptAlert(frame, frame->displayStringModifiedByEncoding(message));
2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Chrome::runJavaScriptConfirm(Frame* frame, const String& message)
3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    willRunModalDialog(frame, ChromeClient::ConfirmDialog, m_client);
3042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
3050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Defer loads in case the client method runs a new event loop that would
3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // otherwise cause the load to continue while we're in the middle of executing JavaScript.
3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PageGroupLoadDeferrer deferrer(m_page, true);
3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(frame);
310635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    return m_client->runJavaScriptConfirm(frame, frame->displayStringModifiedByEncoding(message));
3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Chrome::runJavaScriptPrompt(Frame* frame, const String& prompt, const String& defaultValue, String& result)
3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    willRunModalDialog(frame, ChromeClient::PromptDialog, m_client);
3162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
3170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Defer loads in case the client method runs a new event loop that would
3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // otherwise cause the load to continue while we're in the middle of executing JavaScript.
3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PageGroupLoadDeferrer deferrer(m_page, true);
3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(frame);
322635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    bool ok = m_client->runJavaScriptPrompt(frame, frame->displayStringModifiedByEncoding(prompt), frame->displayStringModifiedByEncoding(defaultValue), result);
3230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (ok)
325635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project        result = frame->displayStringModifiedByEncoding(result);
3260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return ok;
3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::setStatusbarText(Frame* frame, const String& status)
3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT(frame);
333635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project    m_client->setStatusbarText(frame->displayStringModifiedByEncoding(status));
3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool Chrome::shouldInterruptJavaScript()
3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3380bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    // Defer loads in case the client method runs a new event loop that would
3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // otherwise cause the load to continue while we're in the middle of executing JavaScript.
3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    PageGroupLoadDeferrer deferrer(m_page, true);
3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->shouldInterruptJavaScript();
3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(REGISTER_PROTOCOL_HANDLER)
3462fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid Chrome::registerProtocolHandler(const String& scheme, const String& baseURL, const String& url, const String& title)
3472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
3482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_client->registerProtocolHandler(scheme, baseURL, url, title);
3492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
3502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
3512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntRect Chrome::windowResizerRect() const
3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return m_client->windowResizerRect();
3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::mouseDidMoveOverElement(const HitTestResult& result, unsigned modifierFlags)
3588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (result.innerNode()) {
3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        Document* document = result.innerNode()->document();
3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (document && document->isDNSPrefetchEnabled())
362dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block            ResourceHandle::prepareForURL(result.absoluteLinkURL());
3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->mouseDidMoveOverElement(result, modifierFlags);
3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
36665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    InspectorInstrumentation::mouseDidMoveOverElement(m_page, result, modifierFlags);
3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::setToolTip(const HitTestResult& result)
3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // First priority is a potential toolTip representing a spelling or grammar error
3720bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    TextDirection toolTipDirection;
3730bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    String toolTip = result.spellingToolTip(toolTipDirection);
3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Next priority is a toolTip from a URL beneath the mouse (if preference is set to show those).
3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (toolTip.isEmpty() && m_page->settings()->showsURLsInToolTips()) {
3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (Node* node = result.innerNonSharedNode()) {
3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // Get tooltip representing form action, if relevant
3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (node->hasTagName(inputTag)) {
3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                HTMLInputElement* input = static_cast<HTMLInputElement*>(node);
38168513a70bcd92384395513322f1b801e7bf9c729Steve Block                if (input->isSubmitButton())
3820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                    if (HTMLFormElement* form = input->form()) {
3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                        toolTip = form->action();
3840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                        if (form->renderer())
3850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                            toolTipDirection = form->renderer()->style()->direction();
3860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                        else
3870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                            toolTipDirection = LTR;
3880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                    }
3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            }
3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        // Get tooltip representing link's URL
3930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        if (toolTip.isEmpty()) {
3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            // FIXME: Need to pass this URL through userVisibleString once that's in WebCore
3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            toolTip = result.absoluteLinkURL().string();
3960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            // URL always display as LTR.
3970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch            toolTipDirection = LTR;
3980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        }
3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Next we'll consider a tooltip for element with "title" attribute
4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (toolTip.isEmpty())
4030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch        toolTip = result.title(toolTipDirection);
4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    // Lastly, for <input type="file"> that allow multiple files, we'll consider a tooltip for the selected filenames
4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    if (toolTip.isEmpty()) {
4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        if (Node* node = result.innerNonSharedNode()) {
4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            if (node->hasTagName(inputTag)) {
4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                HTMLInputElement* input = static_cast<HTMLInputElement*>(node);
41068513a70bcd92384395513322f1b801e7bf9c729Steve Block                if (input->isFileUpload()) {
4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    FileList* files = input->files();
4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    unsigned listSize = files->length();
41381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch                    if (listSize > 1) {
4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                        Vector<UChar> names;
4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                        for (size_t i = 0; i < listSize; ++i) {
4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                            append(names, files->item(i)->fileName());
4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                            if (i != listSize - 1)
4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                                names.append('\n');
4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                        }
4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                        toolTip = String::adopt(names);
4210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                        // filename always display as LTR.
4220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch                        toolTipDirection = LTR;
4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                    }
4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project                }
4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project            }
4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project        }
4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    }
4280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch
4290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    m_client->setToolTip(toolTip, toolTipDirection);
4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::print(Frame* frame)
4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->print(frame);
4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianvoid Chrome::requestGeolocationPermissionForFrame(Frame* frame, Geolocation* geolocation)
4388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{
4398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian    m_client->requestGeolocationPermissionForFrame(frame, geolocation);
4408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian}
4418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian
442dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid Chrome::cancelGeolocationPermissionRequestForFrame(Frame* frame, Geolocation* geolocation)
443dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{
444dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    m_client->cancelGeolocationPermissionRequestForFrame(frame, geolocation);
445234ad679c5705a581292e45349c33513bbaa526aSteve Block}
446234ad679c5705a581292e45349c33513bbaa526aSteve Block
4472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if ENABLE(DIRECTORY_UPLOAD)
4482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid Chrome::enumerateChosenDirectory(const String& path, FileChooser* fileChooser)
4492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
4502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_client->enumerateChosenDirectory(path, fileChooser);
4512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
4522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
4532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid Chrome::runOpenPanel(Frame* frame, PassRefPtr<FileChooser> fileChooser)
4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    m_client->runOpenPanel(frame, fileChooser);
4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4585f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
459dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid Chrome::chooseIconForFiles(const Vector<String>& filenames, FileChooser* fileChooser)
460692e5dbf12901edacf14812a6fae25462920af42Steve Block{
461dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    m_client->chooseIconForFiles(filenames, fileChooser);
462692e5dbf12901edacf14812a6fae25462920af42Steve Block}
463692e5dbf12901edacf14812a6fae25462920af42Steve Block
464a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochvoid Chrome::dispatchViewportDataDidChange(const ViewportArguments& arguments) const
465a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{
466a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch    m_client->dispatchViewportDataDidChange(arguments);
467a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch}
468a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch
469967717af5423377c967781471ee106e2bb4e11c8Ben Murdochvoid Chrome::setCursor(const Cursor& cursor)
4705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian{
471967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch    m_client->setCursor(cursor);
4725f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian}
4735f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
474ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#if ENABLE(REQUEST_ANIMATION_FRAME)
475ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid Chrome::scheduleAnimation()
476ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{
477ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    m_client->scheduleAnimation();
478ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}
479ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#endif
480ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
481231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(NOTIFICATIONS)
482231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockNotificationPresenter* Chrome::notificationPresenter() const
483231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{
484231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block    return m_client->notificationPresenter();
485231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block}
486231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif
487231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block
4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// --------
4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DASHBOARD_SUPPORT)
4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClient::dashboardRegionsChanged()
4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClient::populateVisitedLinks()
4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFloatRect ChromeClient::customHighlightRect(Node*, const AtomicString&, const FloatRect&)
5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return FloatRect();
5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ChromeClient::paintCustomHighlight(Node*, const AtomicString&, const FloatRect&, const FloatRect&, bool, bool)
5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ChromeClient::shouldReplaceWithGeneratedFileForUpload(const String&, String&)
5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectString ChromeClient::generateReplacementFile(const String&)
5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    ASSERT_NOT_REACHED();
5170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch    return String();
5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool ChromeClient::paintCustomScrollbar(GraphicsContext*, const FloatRect&, ScrollbarControlSize,
521635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                        ScrollbarControlState, ScrollbarPart, bool,
522635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project                                        float, float, ScrollbarControlPartMask)
5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ChromeClient::paintCustomScrollCorner(GraphicsContext*, const FloatRect&)
5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{
5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    return false;
5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
5322fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockbool ChromeClient::paintCustomOverhangArea(GraphicsContext*, const IntRect&, const IntRect&, const IntRect&)
5332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
5342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    return false;
5352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
5362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
537db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Blockbool Chrome::selectItemWritingDirectionIsNatural()
538db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{
539db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    return m_client->selectItemWritingDirectionIsNatural();
540db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}
541db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
5422fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockbool Chrome::selectItemAlignmentFollowsMenuWritingDirection()
5432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
5442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    return m_client->selectItemAlignmentFollowsMenuWritingDirection();
5452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
5462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
547db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve BlockPassRefPtr<PopupMenu> Chrome::createPopupMenu(PopupMenuClient* client) const
548db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{
549db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    return m_client->createPopupMenu(client);
550db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}
551db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block
552db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve BlockPassRefPtr<SearchPopupMenu> Chrome::createSearchPopupMenu(PopupMenuClient* client) const
553db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block{
554db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block    return m_client->createSearchPopupMenu(client);
555db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block}
5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
55728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#if ENABLE(CONTEXT_MENUS)
55828040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhuvoid Chrome::showContextMenu()
55928040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu{
56028040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu    m_client->showContextMenu();
56128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu}
56228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif
56328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu
564f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochbool Chrome::requiresFullscreenForVideoPlayback()
565f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{
566f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch    return m_client->requiresFullscreenForVideoPlayback();
567f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch}
568f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch
5692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid Chrome::willRunModalHTMLDialog(const Frame* frame) const
5702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
5712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    willRunModalDialog(frame, ChromeClient::HTMLDialog, m_client);
5722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
5732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
575