165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/*
2ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * Copyright (C) 2010, 2011 Apple Inc. All rights reserved.
365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * Redistribution and use in source and binary forms, with or without
565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * modification, are permitted provided that the following conditions
665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * are met:
765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 1. Redistributions of source code must retain the above copyright
865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer.
965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright
1065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    notice, this list of conditions and the following disclaimer in the
1165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *    documentation and/or other materials provided with the distribution.
1265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch *
1365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
1465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
1565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
1765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
1865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
1965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
2065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
2165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
2265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
2365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch * THE POSSIBILITY OF SUCH DAMAGE.
2465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch */
2565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "config.h"
2765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPageProxy.h"
2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "AuthenticationChallengeProxy.h"
3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "AuthenticationDecisionListener.h"
3165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "DataReference.h"
322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "DownloadProxy.h"
3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "DrawingAreaProxy.h"
3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "FindIndicator.h"
3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "MessageID.h"
3665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "NativeWebKeyboardEvent.h"
372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "NativeWebMouseEvent.h"
3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PageClient.h"
3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PrintInfo.h"
4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "SessionState.h"
4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "StringPairVector.h"
4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "TextChecker.h"
4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "TextCheckerState.h"
4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WKContextPrivate.h"
4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebBackForwardList.h"
4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebBackForwardListItem.h"
4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebCertificateInfo.h"
4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebContext.h"
4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebContextMenuProxy.h"
5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebContextUserMessageCoders.h"
5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebCoreArgumentCoders.h"
5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebData.h"
5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebEditCommandProxy.h"
5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebEvent.h"
5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebFormSubmissionListenerProxy.h"
5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebFramePolicyListenerProxy.h"
572bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebFullScreenManagerProxy.h"
582bde8e466a4451c7319e3a072d118917957d6554Steve Block#include "WebInspectorProxy.h"
5965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebOpenPanelResultListenerProxy.h"
6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPageCreationParameters.h"
6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPageGroup.h"
6265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPageGroupData.h"
6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPageMessages.h"
6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPopupItem.h"
6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPopupMenuProxy.h"
6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPreferences.h"
6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessMessages.h"
6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessProxy.h"
6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProtectionSpace.h"
7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebSecurityOrigin.h"
7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebURLRequest.h"
7281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <WebCore/DragData.h>
7381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <WebCore/FloatRect.h>
742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <WebCore/FocusDirection.h>
7581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <WebCore/MIMETypeRegistry.h>
7681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <WebCore/WindowFeatures.h>
7781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <stdio.h>
7881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if PLATFORM(WIN)
802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "WebDragSource.h"
812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include <WebCore/BitmapInfo.h>
822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include <WebCore/COMPtr.h>
832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include <WebCore/WCDataObject.h>
842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include <shlobj.h>
852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef NDEBUG
8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <wtf/RefCountedLeakCounter.h>
8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// This controls what strategy we use for mouse wheel coalesing.
9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define MERGE_WHEEL_EVENTS 0
9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#define MESSAGE_CHECK(assertion) MESSAGE_CHECK_BASE(assertion, process()->connection())
9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore;
9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit {
9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochWKPageDebugPaintFlags WebPageProxy::s_debugPaintFlags = 0;
10181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef NDEBUG
10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic WTF::RefCountedLeakCounter webPageProxyCounter("WebPageProxy");
10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochPassRefPtr<WebPageProxy> WebPageProxy::create(PageClient* pageClient, PassRefPtr<WebProcessProxy> process, WebPageGroup* pageGroup, uint64_t pageID)
10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
1082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return adoptRef(new WebPageProxy(pageClient, process, pageGroup, pageID));
10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochWebPageProxy::WebPageProxy(PageClient* pageClient, PassRefPtr<WebProcessProxy> process, WebPageGroup* pageGroup, uint64_t pageID)
11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    : m_pageClient(pageClient)
1132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    , m_process(process)
11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_pageGroup(pageGroup)
11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_mainFrame(0)
11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_userAgent(standardUserAgent())
11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_geolocationPermissionRequestManager(this)
11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_estimatedProgress(0)
11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_isInWindow(m_pageClient->isViewInWindow())
12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_isVisible(m_pageClient->isViewVisible())
12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_backForwardList(WebBackForwardList::create(this))
12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_textZoomFactor(1)
12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_pageZoomFactor(1)
12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_viewScaleFactor(1)
12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_drawsBackground(true)
12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_drawsTransparentBackground(false)
12781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    , m_areMemoryCacheClientCallsEnabled(true)
12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_useFixedLayout(false)
12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_isValid(true)
13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_isClosed(false)
13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_isInPrintingMode(false)
1322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    , m_isPerformingDOMPrintOperation(false)
13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_inDecidePolicyForMIMEType(false)
13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_syncMimeTypePolicyActionIsValid(false)
13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_syncMimeTypePolicyAction(PolicyUse)
13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_syncMimeTypePolicyDownloadID(0)
1372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    , m_inDecidePolicyForNavigationAction(false)
1382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    , m_syncNavigationActionPolicyActionIsValid(false)
1392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    , m_syncNavigationActionPolicyAction(PolicyUse)
14081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    , m_syncNavigationActionPolicyDownloadID(0)
14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_processingWheelEvent(false)
14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_processingMouseMoveEvent(false)
14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_pageID(pageID)
14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC)
14565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_isSmartInsertDeleteEnabled(TextChecker::isSmartInsertDeleteEnabled())
14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_spellDocumentTag(0)
14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_hasSpellDocumentTag(false)
14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_pendingLearnOrIgnoreWordMessageCount(0)
15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_mainFrameHasCustomRepresentation(false)
15165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_currentDragOperation(DragOperationNone)
1522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    , m_mainFrameHasHorizontalScrollbar(false)
1532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    , m_mainFrameHasVerticalScrollbar(false)
15481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    , m_mainFrameIsPinnedToLeftSide(false)
15581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    , m_mainFrameIsPinnedToRightSide(false)
15665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef NDEBUG
15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPageProxyCounter.increment();
15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebContext::statistics().wkPageCount++;
16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageGroup->addPage(this);
16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
16565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
16665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebPageProxy::~WebPageProxy()
16765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
1682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!m_isClosed)
1692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        close();
1702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebContext::statistics().wkPageCount--;
17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_hasSpellDocumentTag)
17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        TextChecker::closeSpellDocumentWithTag(m_spellDocumentTag);
17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageGroup->removePage(this);
17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#ifndef NDEBUG
17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPageProxyCounter.decrement();
18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebProcessProxy* WebPageProxy::process() const
18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
1852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return m_process.get();
18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebPageProxy::isValid()
18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // A page that has been explicitly closed is never valid.
19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_isClosed)
19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return false;
19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_isValid;
19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setDrawingArea(PassOwnPtr<DrawingAreaProxy> drawingArea)
19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (drawingArea == m_drawingArea)
20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_drawingArea = drawingArea;
20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::initializeLoaderClient(const WKPageLoaderClient* loadClient)
20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.initialize(loadClient);
20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::initializePolicyClient(const WKPagePolicyClient* policyClient)
21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_policyClient.initialize(policyClient);
21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::initializeFormClient(const WKPageFormClient* formClient)
21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_formClient.initialize(formClient);
21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::initializeResourceLoadClient(const WKPageResourceLoadClient* client)
22165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_resourceLoadClient.initialize(client);
22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::initializeUIClient(const WKPageUIClient* client)
22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
2272bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!isValid())
2282bde8e466a4451c7319e3a072d118917957d6554Steve Block        return;
2292bde8e466a4451c7319e3a072d118917957d6554Steve Block
23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.initialize(client);
23181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
23281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    process()->send(Messages::WebPage::SetCanRunBeforeUnloadConfirmPanel(m_uiClient.canRunBeforeUnloadConfirmPanel()), m_pageID);
23381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    process()->send(Messages::WebPage::SetCanRunModal(m_uiClient.canRunModal()), m_pageID);
23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::initializeFindClient(const WKPageFindClient* client)
23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_findClient.initialize(client);
23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::initializeContextMenuClient(const WKPageContextMenuClient* client)
24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_contextMenuClient.initialize(client);
24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::reattachToWebProcess()
24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
2482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    ASSERT(!isValid());
2492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
25065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_isValid = true;
25165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_process = m_process->context()->relaunchProcessIfNecessary();
25365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->addExistingWebPage(this, m_pageID);
25465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
25565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    initializeWebPage();
25665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
25765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->didRelaunchProcess();
25865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
25965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
26065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::reattachToWebProcessWithItem(WebBackForwardListItem* item)
26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
26265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (item && item != m_backForwardList->currentItem())
26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_backForwardList->goToItem(item);
26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
26565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    reattachToWebProcess();
2662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
2672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!item)
2682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
2692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
2702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    SandboxExtension::Handle sandboxExtensionHandle;
2712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    initializeSandboxExtensionHandle(KURL(KURL(), item->url()), sandboxExtensionHandle);
2722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::GoToBackForwardItem(item->itemID(), sandboxExtensionHandle), m_pageID);
27365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
27465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
27565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::initializeWebPage()
27665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(isValid());
27865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
27965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    BackForwardListItemVector items = m_backForwardList->entries();
28065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    for (size_t i = 0; i < items.size(); ++i)
28165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        process()->registerNewWebBackForwardListItem(items[i].get());
28265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
28365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_drawingArea = m_pageClient->createDrawingAreaProxy();
28465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(m_drawingArea);
28565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
28665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebProcess::CreateWebPage(m_pageID, creationParameters()), 0);
28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
28865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::close()
29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
29365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
29465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_isClosed = true;
29565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
29665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_backForwardList->pageClosed();
2972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_pageClient->pageClosed();
29865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
29965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->disconnectFramesFromPage(this);
30065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_mainFrame = 0;
30165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
30265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(INSPECTOR)
30365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_inspector) {
30465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_inspector->invalidate();
30565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_inspector = 0;
30665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
30765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
30865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3092bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(FULLSCREEN_API)
3102bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (m_fullScreenManager) {
3112bde8e466a4451c7319e3a072d118917957d6554Steve Block        m_fullScreenManager->invalidate();
3122bde8e466a4451c7319e3a072d118917957d6554Steve Block        m_fullScreenManager = 0;
3132bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
3142bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
3152bde8e466a4451c7319e3a072d118917957d6554Steve Block
31665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_openPanelResultListener) {
31765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_openPanelResultListener->invalidate();
31865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_openPanelResultListener = 0;
31965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
32065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
32165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_geolocationPermissionRequestManager.invalidateRequests();
32265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
32365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_toolTip = String();
32465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_mainFrameHasHorizontalScrollbar = false;
3262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_mainFrameHasVerticalScrollbar = false;
3272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
32881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_mainFrameIsPinnedToLeftSide = false;
32981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_mainFrameIsPinnedToRightSide = false;
33081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
3312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    invalidateCallbackMap(m_voidCallbacks);
33265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    invalidateCallbackMap(m_dataCallbacks);
33365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    invalidateCallbackMap(m_stringCallbacks);
3342bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_loadDependentStringCallbackIDs.clear();
33581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    invalidateCallbackMap(m_scriptValueCallbacks);
3362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    invalidateCallbackMap(m_computedPagesCallbacks);
33765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
33865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    Vector<WebEditCommandProxy*> editCommandVector;
33965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    copyToVector(m_editCommandSet, editCommandVector);
34065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_editCommandSet.clear();
34165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    for (size_t i = 0, size = editCommandVector.size(); i < size; ++i)
34265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        editCommandVector[i]->invalidate();
34365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
34465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_activePopupMenu = 0;
34565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
34665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_estimatedProgress = 0.0;
34765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
34865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.initialize(0);
34965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_policyClient.initialize(0);
35065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.initialize(0);
35165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
35265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_drawingArea.clear();
35365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
35465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::Close(), m_pageID);
35565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->removeWebPage(m_pageID);
35665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
35765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
35865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebPageProxy::tryClose()
35965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
36065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
36165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return true;
36265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
36365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::TryClose(), m_pageID);
36465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return false;
36565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
36665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3672fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::initializeSandboxExtensionHandle(const KURL& url, SandboxExtension::Handle& sandboxExtensionHandle)
36865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
36965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!url.isLocalFile())
37065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
37165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // Don't give the inspector full access to the file system.
3732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (WebInspectorProxy::isInspectorPage(this))
3742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
3752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
37665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    SandboxExtension::createHandle("/", SandboxExtension::ReadOnly, sandboxExtensionHandle);
37765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
37865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
37965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::loadURL(const String& url)
38065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
3812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    setPendingAPIRequestURL(url);
3822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
38365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
38465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        reattachToWebProcess();
38565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
38665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    SandboxExtension::Handle sandboxExtensionHandle;
38765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    initializeSandboxExtensionHandle(KURL(KURL(), url), sandboxExtensionHandle);
38865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::LoadURL(url, sandboxExtensionHandle), m_pageID);
38965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
39065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
39165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::loadURLRequest(WebURLRequest* urlRequest)
39265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
3932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    setPendingAPIRequestURL(urlRequest->resourceRequest().url());
3942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
39565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
39665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        reattachToWebProcess();
39765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
39865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    SandboxExtension::Handle sandboxExtensionHandle;
39965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    initializeSandboxExtensionHandle(urlRequest->resourceRequest().url(), sandboxExtensionHandle);
40065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::LoadURLRequest(urlRequest->resourceRequest(), sandboxExtensionHandle), m_pageID);
40165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
40265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
40365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::loadHTMLString(const String& htmlString, const String& baseURL)
40465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
40565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
4062bde8e466a4451c7319e3a072d118917957d6554Steve Block        reattachToWebProcess();
4072bde8e466a4451c7319e3a072d118917957d6554Steve Block
40865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::LoadHTMLString(htmlString, baseURL), m_pageID);
40965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
41065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
41165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::loadAlternateHTMLString(const String& htmlString, const String& baseURL, const String& unreachableURL)
41265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
41365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
4142bde8e466a4451c7319e3a072d118917957d6554Steve Block        reattachToWebProcess();
41565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4162bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (m_mainFrame)
4172bde8e466a4451c7319e3a072d118917957d6554Steve Block        m_mainFrame->setUnreachableURL(unreachableURL);
41865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
41965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::LoadAlternateHTMLString(htmlString, baseURL, unreachableURL), m_pageID);
42065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
42165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
42265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::loadPlainTextString(const String& string)
42365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
42465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
4252bde8e466a4451c7319e3a072d118917957d6554Steve Block        reattachToWebProcess();
4262bde8e466a4451c7319e3a072d118917957d6554Steve Block
42765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::LoadPlainTextString(string), m_pageID);
42865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
42965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
43065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::stopLoading()
43165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
43265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
43365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
43465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::StopLoading(), m_pageID);
43565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
43665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
43765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::reload(bool reloadFromOrigin)
43865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
4392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (m_backForwardList->currentItem())
4402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        setPendingAPIRequestURL(m_backForwardList->currentItem()->url());
4412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
44265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid()) {
44365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        reattachToWebProcessWithItem(m_backForwardList->currentItem());
44465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
44565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
44665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
44765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::Reload(reloadFromOrigin), m_pageID);
44865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
44965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
45065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::goForward()
45165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
4522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (isValid() && !canGoForward())
45365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
45465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    WebBackForwardListItem* forwardItem = m_backForwardList->forwardItem();
4562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (forwardItem)
4572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        setPendingAPIRequestURL(forwardItem->url());
4582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
4592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!isValid()) {
4602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        reattachToWebProcessWithItem(forwardItem);
46165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
4622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
46365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    SandboxExtension::Handle sandboxExtensionHandle;
4652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    initializeSandboxExtensionHandle(KURL(KURL(), forwardItem->url()), sandboxExtensionHandle);
4662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::GoForward(forwardItem->itemID(), sandboxExtensionHandle), m_pageID);
46765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
46865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
46965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebPageProxy::canGoForward() const
47065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
47165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_backForwardList->forwardItem();
47265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
47365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
47465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::goBack()
47565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
4762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (isValid() && !canGoBack())
47765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
47865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    WebBackForwardListItem* backItem = m_backForwardList->backItem();
4802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (backItem)
4812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        setPendingAPIRequestURL(backItem->url());
4822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
4832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!isValid()) {
4842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        reattachToWebProcessWithItem(backItem);
48565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
4862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
48765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    SandboxExtension::Handle sandboxExtensionHandle;
4892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    initializeSandboxExtensionHandle(KURL(KURL(), backItem->url()), sandboxExtensionHandle);
4902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::GoBack(backItem->itemID(), sandboxExtensionHandle), m_pageID);
49165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
49265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
49365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebPageProxy::canGoBack() const
49465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
49565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_backForwardList->backItem();
49665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
49765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
49865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::goToBackForwardItem(WebBackForwardListItem* item)
49965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
50065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid()) {
50165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        reattachToWebProcessWithItem(item);
50265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
50365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
50481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
50581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    setPendingAPIRequestURL(item->url());
50665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    SandboxExtension::Handle sandboxExtensionHandle;
5082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    initializeSandboxExtensionHandle(KURL(KURL(), item->url()), sandboxExtensionHandle);
5092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::GoToBackForwardItem(item->itemID(), sandboxExtensionHandle), m_pageID);
51065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
51165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5122fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::didChangeBackForwardList(WebBackForwardListItem* added, Vector<RefPtr<APIObject> >* removed)
51365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
5142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_loaderClient.didChangeBackForwardList(this, added, removed);
51565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
51665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
51781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::shouldGoToBackForwardListItem(uint64_t itemID, bool& shouldGoToBackForwardItem)
51881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
51981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebBackForwardListItem* item = process()->webBackForwardItem(itemID);
52081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    shouldGoToBackForwardItem = item && m_loaderClient.shouldGoToBackForwardListItem(this, item);
52181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
52265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
52365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebPageProxy::canShowMIMEType(const String& mimeType) const
52465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
52565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (MIMETypeRegistry::isSupportedNonImageMIMEType(mimeType))
52665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return true;
52765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
52865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (MIMETypeRegistry::isSupportedImageMIMEType(mimeType))
52965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return true;
5302bde8e466a4451c7319e3a072d118917957d6554Steve Block
5312bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (mimeType.startsWith("text/", false))
5322bde8e466a4451c7319e3a072d118917957d6554Steve Block        return !MIMETypeRegistry::isUnsupportedTextMIMEType(mimeType);
5332bde8e466a4451c7319e3a072d118917957d6554Steve Block
53465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    String newMimeType = mimeType;
5352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    PluginInfoStore::Plugin plugin = m_process->context()->pluginInfoStore()->findPlugin(newMimeType, KURL());
53665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!plugin.path.isNull())
53765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return true;
53865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
53965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return false;
54065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
54165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
54265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setDrawsBackground(bool drawsBackground)
54365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
54465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_drawsBackground == drawsBackground)
54565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
54665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
54765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_drawsBackground = drawsBackground;
54865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
54965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (isValid())
55065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        process()->send(Messages::WebPage::SetDrawsBackground(drawsBackground), m_pageID);
55165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
55265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
55365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setDrawsTransparentBackground(bool drawsTransparentBackground)
55465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
55565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_drawsTransparentBackground == drawsTransparentBackground)
55665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
55765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
55865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_drawsTransparentBackground = drawsTransparentBackground;
55965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
56065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (isValid())
56165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        process()->send(Messages::WebPage::SetDrawsTransparentBackground(drawsTransparentBackground), m_pageID);
56265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
56365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5642fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::viewWillStartLiveResize()
5652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
5662bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!isValid())
5672bde8e466a4451c7319e3a072d118917957d6554Steve Block        return;
5682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::ViewWillStartLiveResize(), m_pageID);
5692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
5702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
5712fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::viewWillEndLiveResize()
5722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
5732bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!isValid())
5742bde8e466a4451c7319e3a072d118917957d6554Steve Block        return;
5752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::ViewWillEndLiveResize(), m_pageID);
5762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
5772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
57865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setViewNeedsDisplay(const IntRect& rect)
57965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
58065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->setViewNeedsDisplay(rect);
58165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
58265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
58365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::displayView()
58465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
58565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->displayView();
58665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
58765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
588ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid WebPageProxy::scrollView(const IntRect& scrollRect, const IntSize& scrollOffset)
589ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{
590ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    m_pageClient->scrollView(scrollRect, scrollOffset);
591ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}
592ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
59365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::viewStateDidChange(ViewStateFlags flags)
59465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
59565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
59665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
59765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
59865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (flags & ViewIsFocused)
59965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        process()->send(Messages::WebPage::SetFocused(m_pageClient->isViewFocused()), m_pageID);
60065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
60165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (flags & ViewWindowIsActive)
60265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        process()->send(Messages::WebPage::SetActive(m_pageClient->isViewWindowActive()), m_pageID);
60365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
60465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (flags & ViewIsVisible) {
60565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        bool isVisible = m_pageClient->isViewVisible();
60665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        if (isVisible != m_isVisible) {
60765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            m_isVisible = isVisible;
608ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch            m_drawingArea->visibilityDidChange();
60965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            m_drawingArea->setPageIsVisible(isVisible);
61065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        }
61165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
61265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
61365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (flags & ViewIsInWindow) {
61465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        bool isInWindow = m_pageClient->isViewInWindow();
61565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        if (m_isInWindow != isInWindow) {
61665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            m_isInWindow = isInWindow;
61765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            process()->send(Messages::WebPage::SetIsInWindow(isInWindow), m_pageID);
61865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        }
61965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
6202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
6212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (flags & (ViewWindowIsActive | ViewIsVisible))
6222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_drawingArea->setBackingStoreIsDiscardable(!m_pageClient->isViewWindowActive() || !isViewVisible());
62365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
62465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
62565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochIntSize WebPageProxy::viewSize() const
62665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
62765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_pageClient->viewSize();
62865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
62965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
63065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setInitialFocus(bool forward)
63165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
63265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
63365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
63465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::SetInitialFocus(forward), m_pageID);
63565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
63665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
63765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setWindowResizerSize(const IntSize& windowResizerSize)
63865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
63965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
64065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
64165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::SetWindowResizerSize(windowResizerSize), m_pageID);
64265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
64365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
64481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::validateCommand(const String& commandName, PassRefPtr<ValidateCommandCallback> callback)
64565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
64681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!isValid()) {
64781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        callback->invalidate();
64865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
64981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
65081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
65181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    uint64_t callbackID = callback->callbackID();
65281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_validateCommandCallbacks.set(callbackID, callback.get());
65381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    process()->send(Messages::WebPage::ValidateCommand(commandName, callbackID), m_pageID);
65465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
65565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
65665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::executeEditCommand(const String& commandName)
65765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
65865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
65965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
66065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
66165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::ExecuteEditCommand(commandName), m_pageID);
66265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
66365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6642bde8e466a4451c7319e3a072d118917957d6554Steve Block#if PLATFORM(WIN)
66565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebCore::IntRect WebPageProxy::firstRectForCharacterInSelectedRange(int characterPosition)
66665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
66765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    IntRect resultRect;
66865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->sendSync(Messages::WebPage::FirstRectForCharacterInSelectedRange(characterPosition), Messages::WebPage::FirstRectForCharacterInSelectedRange::Reply(resultRect), m_pageID);
66965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return resultRect;
67065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
67165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
67265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochString WebPageProxy::getSelectedText()
67365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
67465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    String text;
67565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->sendSync(Messages::WebPage::GetSelectedText(), Messages::WebPage::GetSelectedText::Reply(text), m_pageID);
67665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return text;
67765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
6782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
6792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool WebPageProxy::gestureWillBegin(const IntPoint& point)
6802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
6812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool canBeginPanning = false;
6822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    process()->sendSync(Messages::WebPage::GestureWillBegin(point), Messages::WebPage::GestureWillBegin::Reply(canBeginPanning), m_pageID);
6832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return canBeginPanning;
6842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
6852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
6862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::gestureDidScroll(const IntSize& size)
6872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
6882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    process()->send(Messages::WebPage::GestureDidScroll(size), m_pageID);
6892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
6902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
6912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::gestureDidEnd()
6922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
6932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    process()->send(Messages::WebPage::GestureDidEnd(), m_pageID);
6942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
6952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
6962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::setGestureReachedScrollingLimit(bool limitReached)
6972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
6982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_pageClient->setGestureReachedScrollingLimit(limitReached);
6992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
70065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
70165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
70265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(TILED_BACKING_STORE)
70365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setActualVisibleContentRect(const IntRect& rect)
70465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
70565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
70665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
70765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
70865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::SetActualVisibleContentRect(rect), m_pageID);
70965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
71065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
71165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::dragEntered(WebCore::DragData* dragData, const String& dragStorageName)
7132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
7142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    SandboxExtension::Handle sandboxExtensionHandle;
7152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    performDragControllerAction(DragControllerActionEntered, dragData, dragStorageName, sandboxExtensionHandle);
7162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
7172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
7182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::dragUpdated(WebCore::DragData* dragData, const String& dragStorageName)
7192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
7202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    SandboxExtension::Handle sandboxExtensionHandle;
7212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    performDragControllerAction(DragControllerActionUpdated, dragData, dragStorageName, sandboxExtensionHandle);
7222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
7232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
7242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::dragExited(WebCore::DragData* dragData, const String& dragStorageName)
7252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
7262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    SandboxExtension::Handle sandboxExtensionHandle;
7272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    performDragControllerAction(DragControllerActionExited, dragData, dragStorageName, sandboxExtensionHandle);
7282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
7292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
7302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::performDrag(WebCore::DragData* dragData, const String& dragStorageName, const SandboxExtension::Handle& sandboxExtensionHandle)
7312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
7322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    performDragControllerAction(DragControllerActionPerformDrag, dragData, dragStorageName, sandboxExtensionHandle);
7332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
7342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
7352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::performDragControllerAction(DragControllerAction action, WebCore::DragData* dragData, const String& dragStorageName, const SandboxExtension::Handle& sandboxExtensionHandle)
73665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
73765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
73865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
7392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if PLATFORM(WIN)
7402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // FIXME: We should pass the drag data map only on DragEnter.
7412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::PerformDragControllerAction(action, dragData->clientPosition(), dragData->globalPosition(),
7422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        dragData->draggingSourceOperationMask(), dragData->dragDataMap(), dragData->flags()), m_pageID);
7432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#else
7442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    process()->send(Messages::WebPage::PerformDragControllerAction(action, dragData->clientPosition(), dragData->globalPosition(), dragData->draggingSourceOperationMask(), dragStorageName, dragData->flags(), sandboxExtensionHandle), m_pageID);
7452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
74665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
74765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
74865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didPerformDragControllerAction(uint64_t resultOperation)
74965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
75065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_currentDragOperation = static_cast<DragOperation>(resultOperation);
75165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
75265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if PLATFORM(WIN)
7542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
7552fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::startDragDrop(const IntPoint& imageOrigin, const IntPoint& dragPoint, uint64_t okEffect,
7562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    const HashMap<UINT, Vector<String> >& dataMap, const IntSize& dragImageSize, const SharedMemory::Handle& dragImageHandle, bool isLinkDrag)
7572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
7582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    COMPtr<WCDataObject> dataObject;
7592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    WCDataObject::createInstance(&dataObject, dataMap);
7602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
7612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<SharedMemory> memoryBuffer = SharedMemory::create(dragImageHandle, SharedMemory::ReadOnly);
7622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!memoryBuffer)
7632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
7642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
7652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<WebDragSource> source = WebDragSource::createInstance();
7662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!source)
7672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
7682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
7692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    COMPtr<IDragSourceHelper> helper;
7702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (FAILED(::CoCreateInstance(CLSID_DragDropHelper, 0, CLSCTX_INPROC_SERVER, IID_IDragSourceHelper, reinterpret_cast<LPVOID*>(&helper))))
7712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
7722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
7732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    BitmapInfo bitmapInfo = BitmapInfo::create(dragImageSize);
7742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    void* bits;
7752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    OwnPtr<HBITMAP> hbmp(::CreateDIBSection(0, &bitmapInfo, DIB_RGB_COLORS, &bits, 0, 0));
7762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    memcpy(bits, memoryBuffer->data(), memoryBuffer->size());
7772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
7782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    SHDRAGIMAGE sdi;
7792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    sdi.sizeDragImage.cx = bitmapInfo.bmiHeader.biWidth;
7802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    sdi.sizeDragImage.cy = bitmapInfo.bmiHeader.biHeight;
7812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    sdi.crColorKey = 0xffffffff;
7822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    sdi.hbmpDragImage = hbmp.leakPtr();
7832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    sdi.ptOffset.x = dragPoint.x() - imageOrigin.x();
7842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    sdi.ptOffset.y = dragPoint.y() - imageOrigin.y();
7852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (isLinkDrag)
7862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        sdi.ptOffset.y = bitmapInfo.bmiHeader.biHeight - sdi.ptOffset.y;
7872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
7882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    helper->InitializeFromBitmap(&sdi, dataObject.get());
7892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
7902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    DWORD effect = DROPEFFECT_NONE;
7912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
7922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    DragOperation operation = DragOperationNone;
7932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (::DoDragDrop(dataObject.get(), source.get(), okEffect, &effect) == DRAGDROP_S_DROP) {
7942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        if (effect & DROPEFFECT_COPY)
7952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            operation = DragOperationCopy;
7962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        else if (effect & DROPEFFECT_LINK)
7972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            operation = DragOperationLink;
7982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        else if (effect & DROPEFFECT_MOVE)
7992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            operation = DragOperationMove;
8002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
8012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    POINT globalPoint;
8022fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    ::GetCursorPos(&globalPoint);
8032fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    POINT localPoint = globalPoint;
8042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    ::ScreenToClient(m_pageClient->nativeWindow(), &localPoint);
8052fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
8062fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    dragEnded(localPoint, globalPoint, operation);
8072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
8082fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
8092fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
810ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid WebPageProxy::dragEnded(const WebCore::IntPoint& clientPosition, const WebCore::IntPoint& globalPosition, uint64_t operation)
811ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{
812ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    if (!isValid())
813ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch        return;
814ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    process()->send(Messages::WebPage::DragEnded(clientPosition, globalPosition, operation), m_pageID);
815ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}
816ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
8172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::handleMouseEvent(const NativeWebMouseEvent& event)
81865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
81965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
82065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
82165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
82265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // NOTE: This does not start the responsiveness timer because mouse move should not indicate interaction.
82365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (event.type() != WebEvent::MouseMove)
82465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        process()->responsivenessTimer()->start();
82565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    else {
82665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        if (m_processingMouseMoveEvent) {
8272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            m_nextMouseMoveEvent = adoptPtr(new NativeWebMouseEvent(event));
82865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            return;
82965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        }
83065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
83165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_processingMouseMoveEvent = true;
83265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
83365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // <https://bugs.webkit.org/show_bug.cgi?id=57904> We need to keep track of the mouse down event in the case where we
8352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // display a popup menu for select elements. When the user changes the selected item,
8362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // we fake a mouse up event by using this stored down event. This event gets cleared
8372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // when the mouse up message is received from WebProcess.
8382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (event.type() == WebEvent::MouseDown)
8392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_currentlyProcessedMouseDownEvent = adoptPtr(new NativeWebMouseEvent(event));
8402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
84165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::MouseEvent(event), m_pageID);
84265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
84365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
84465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstatic PassOwnPtr<WebWheelEvent> coalesceWheelEvents(WebWheelEvent* oldNextWheelEvent, const WebWheelEvent& newWheelEvent)
84565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
84665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if MERGE_WHEEL_EVENTS
84765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Merge model: Combine wheel event deltas (and wheel ticks) into a single wheel event.
84865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!oldNextWheelEvent)
84965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return adoptPtr(new WebWheelEvent(newWheelEvent));
85065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
85165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (oldNextWheelEvent->position() != newWheelEvent.position() || oldNextWheelEvent->modifiers() != newWheelEvent.modifiers() || oldNextWheelEvent->granularity() != newWheelEvent.granularity())
85265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return adoptPtr(new WebWheelEvent(newWheelEvent));
85365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
85465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    FloatSize mergedDelta = oldNextWheelEvent->delta() + newWheelEvent.delta();
85565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    FloatSize mergedWheelTicks = oldNextWheelEvent->wheelTicks() + newWheelEvent.wheelTicks();
85665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
85765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return adoptPtr(new WebWheelEvent(WebEvent::Wheel, newWheelEvent.position(), newWheelEvent.globalPosition(), mergedDelta, mergedWheelTicks, newWheelEvent.granularity(), newWheelEvent.modifiers(), newWheelEvent.timestamp()));
85865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#else
85965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Simple model: Just keep the last event, dropping all interim events.
86065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return adoptPtr(new WebWheelEvent(newWheelEvent));
86165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
86265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
86365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
86465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::handleWheelEvent(const WebWheelEvent& event)
86565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
86665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
86765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
86865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
86965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_processingWheelEvent) {
87065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_nextWheelEvent = coalesceWheelEvents(m_nextWheelEvent.get(), event);
87165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
87265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
87365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
87465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->responsivenessTimer()->start();
87565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::WheelEvent(event), m_pageID);
87665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_processingWheelEvent = true;
87765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
87865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
87965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::handleKeyboardEvent(const NativeWebKeyboardEvent& event)
88065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
88165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
88265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
88365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
88465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_keyEventQueue.append(event);
88565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
88665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->responsivenessTimer()->start();
88765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::KeyEvent(event), m_pageID);
88865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
88965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(GESTURE_EVENTS)
8912fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::handleGestureEvent(const WebGestureEvent& event)
8922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
8932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!isValid())
8942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
8952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
8962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->responsivenessTimer()->start();
8972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::GestureEvent(event), m_pageID);
8982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
8992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
9002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
90165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(TOUCH_EVENTS)
90265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::handleTouchEvent(const WebTouchEvent& event)
90365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
90465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
90565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
90665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::TouchEvent(event), m_pageID);
90765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
90865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
90965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9102bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebPageProxy::scrollBy(ScrollDirection direction, ScrollGranularity granularity)
9112bde8e466a4451c7319e3a072d118917957d6554Steve Block{
9122bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!isValid())
9132bde8e466a4451c7319e3a072d118917957d6554Steve Block        return;
9142bde8e466a4451c7319e3a072d118917957d6554Steve Block
9152bde8e466a4451c7319e3a072d118917957d6554Steve Block    process()->send(Messages::WebPage::ScrollBy(direction, granularity), m_pageID);
9162bde8e466a4451c7319e3a072d118917957d6554Steve Block}
9172bde8e466a4451c7319e3a072d118917957d6554Steve Block
91865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::receivedPolicyDecision(PolicyAction action, WebFrameProxy* frame, uint64_t listenerID)
91965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
92065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
92165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
92265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
92365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t downloadID = 0;
92465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (action == PolicyDownload) {
92565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        // Create a download proxy.
9262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        downloadID = m_process->context()->createDownloadProxy()->downloadID();
92765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
92865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
92965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // If we received a policy decision while in decidePolicyForMIMEType the decision will
93065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // be sent back to the web process by decidePolicyForMIMEType.
93165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_inDecidePolicyForMIMEType) {
93265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_syncMimeTypePolicyActionIsValid = true;
93365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_syncMimeTypePolicyAction = action;
93465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_syncMimeTypePolicyDownloadID = downloadID;
93565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
93665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
93765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // If we received a policy decision while in decidePolicyForNavigationAction the decision will
9392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // be sent back to the web process by decidePolicyForNavigationAction.
9402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (m_inDecidePolicyForNavigationAction) {
9412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        m_syncNavigationActionPolicyActionIsValid = true;
9422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        m_syncNavigationActionPolicyAction = action;
94381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        m_syncNavigationActionPolicyDownloadID = downloadID;
9442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
9452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
9462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
94765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::DidReceivePolicyDecision(frame->frameID(), listenerID, action, downloadID), m_pageID);
94865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
94965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
95065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochString WebPageProxy::pageTitle() const
95165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
95265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Return the null string if there is no main frame (e.g. nothing has been loaded in the page yet, WebProcess has
95365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // crashed, page has been closed).
95465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_mainFrame)
95565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return String();
95665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
95765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_mainFrame->title();
95865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
95965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
96065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setUserAgent(const String& userAgent)
96165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
96265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_userAgent == userAgent)
96365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
96465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_userAgent = userAgent;
96565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
96665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
96765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
96865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::SetUserAgent(m_userAgent), m_pageID);
96965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
97065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
97165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setApplicationNameForUserAgent(const String& applicationName)
97265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
97365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_applicationNameForUserAgent == applicationName)
97465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
97565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
97665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_applicationNameForUserAgent = applicationName;
97765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_customUserAgent.isEmpty())
97865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
97965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
98065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    setUserAgent(standardUserAgent(m_applicationNameForUserAgent));
98165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
98265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
98365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setCustomUserAgent(const String& customUserAgent)
98465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
98565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_customUserAgent == customUserAgent)
98665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
98765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
98865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_customUserAgent = customUserAgent;
98965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
99065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_customUserAgent.isEmpty()) {
99165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        setUserAgent(standardUserAgent(m_applicationNameForUserAgent));
99265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
99365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
99465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
99565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    setUserAgent(m_customUserAgent);
99665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
99765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
99865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebPageProxy::supportsTextEncoding() const
99965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
100065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return !m_mainFrameHasCustomRepresentation && m_mainFrame && !m_mainFrame->isDisplayingStandaloneImageDocument();
100165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
100265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
100365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setCustomTextEncodingName(const String& encodingName)
100465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
100565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_customTextEncodingName == encodingName)
100665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
100765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_customTextEncodingName = encodingName;
100865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
100965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
101065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
101165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::SetCustomTextEncodingName(encodingName), m_pageID);
101265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
101365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
101465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::terminateProcess()
101565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
101665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
101765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
101865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
101965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->terminate();
102065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
102165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
102281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if !USE(CF) || defined(BUILDING_QT__)
102365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<WebData> WebPageProxy::sessionStateData(WebPageProxySessionStateFilterCallback, void* context) const
102465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
102565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: Return session state data for saving Page state.
102665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return 0;
102765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
102865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
102965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::restoreFromSessionStateData(WebData*)
103065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
103165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: Restore the Page from the passed in session state data.
103265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
103365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
103465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
103565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebPageProxy::supportsTextZoom() const
103665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
103765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_mainFrameHasCustomRepresentation)
103865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return false;
103965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
104065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: This should also return false for standalone media and plug-in documents.
104165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_mainFrame || m_mainFrame->isDisplayingStandaloneImageDocument())
104265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return false;
104365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
104465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return true;
104565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
104665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
104765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setTextZoomFactor(double zoomFactor)
104865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
104965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
105065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
105165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
105265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_mainFrameHasCustomRepresentation)
105365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
105465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
105565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_textZoomFactor == zoomFactor)
105665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
105765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
105865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_textZoomFactor = zoomFactor;
105965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::SetTextZoomFactor(m_textZoomFactor), m_pageID);
106065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
106165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
106265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochdouble WebPageProxy::pageZoomFactor() const
106365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
106465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_mainFrameHasCustomRepresentation ? m_pageClient->customRepresentationZoomFactor() : m_pageZoomFactor;
106565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
106665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
106765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setPageZoomFactor(double zoomFactor)
106865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
106965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
107065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
107165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
107265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_mainFrameHasCustomRepresentation) {
107365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_pageClient->setCustomRepresentationZoomFactor(zoomFactor);
107465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
107565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
107665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
107765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_pageZoomFactor == zoomFactor)
107865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
107965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
108065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageZoomFactor = zoomFactor;
108165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::SetPageZoomFactor(m_pageZoomFactor), m_pageID);
108265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
108365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
108465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setPageAndTextZoomFactors(double pageZoomFactor, double textZoomFactor)
108565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
108665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
108765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
108865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
108965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_mainFrameHasCustomRepresentation) {
109065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_pageClient->setCustomRepresentationZoomFactor(pageZoomFactor);
109165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
109265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
109365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
109465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_pageZoomFactor == pageZoomFactor && m_textZoomFactor == textZoomFactor)
109565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
109665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
109765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageZoomFactor = pageZoomFactor;
109865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_textZoomFactor = textZoomFactor;
109965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::SetPageAndTextZoomFactors(m_pageZoomFactor, m_textZoomFactor), m_pageID);
110065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
110165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
110265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::scaleWebView(double scale, const IntPoint& origin)
110365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
110465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
110565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
110665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
110765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::ScaleWebView(scale, origin), m_pageID);
110865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
110965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
111065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setUseFixedLayout(bool fixed)
111165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
111265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
111365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
111465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
111565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (fixed == m_useFixedLayout)
111665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
111765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
111865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_useFixedLayout = fixed;
111965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!fixed)
112065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_fixedLayoutSize = IntSize();
112165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::SetUseFixedLayout(fixed), m_pageID);
112265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
112365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
112465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setFixedLayoutSize(const IntSize& size)
112565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
112665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
112765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
112865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
112965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (size == m_fixedLayoutSize)
113065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
113165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
113265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_fixedLayoutSize = size;
113365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::SetFixedLayoutSize(size), m_pageID);
113465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
113565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11362fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::viewScaleFactorDidChange(double scaleFactor)
11372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
11382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_viewScaleFactor = scaleFactor;
11392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
11402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
114181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::setMemoryCacheClientCallsEnabled(bool memoryCacheClientCallsEnabled)
114281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
11432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!isValid())
11442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
11452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
114681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (m_areMemoryCacheClientCallsEnabled == memoryCacheClientCallsEnabled)
114781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
114881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
114981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_areMemoryCacheClientCallsEnabled = memoryCacheClientCallsEnabled;
115081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    process()->send(Messages::WebPage::SetMemoryCacheMessagesEnabled(memoryCacheClientCallsEnabled), m_pageID);
115181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
115281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
115365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::findString(const String& string, FindOptions options, unsigned maxMatchCount)
115465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
11552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (m_mainFrameHasCustomRepresentation)
11562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_pageClient->findStringInCustomRepresentation(string, options, maxMatchCount);
11572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    else
11582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        process()->send(Messages::WebPage::FindString(string, options, maxMatchCount), m_pageID);
115965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
116065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
116165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::hideFindUI()
116265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
116365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::HideFindUI(), m_pageID);
116465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
116565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
116665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::countStringMatches(const String& string, FindOptions options, unsigned maxMatchCount)
116765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
11682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (m_mainFrameHasCustomRepresentation) {
11692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_pageClient->countStringMatchesInCustomRepresentation(string, options, maxMatchCount);
11702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
11712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
11722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
11732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!isValid())
11742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
11752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
117665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::CountStringMatches(string, options, maxMatchCount), m_pageID);
117765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
117881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
117981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::runJavaScriptInMainFrame(const String& script, PassRefPtr<ScriptValueCallback> prpCallback)
118065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
118181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<ScriptValueCallback> callback = prpCallback;
11822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!isValid()) {
11832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        callback->invalidate();
11842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
11852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
11862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
118765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t callbackID = callback->callbackID();
118881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_scriptValueCallbacks.set(callbackID, callback.get());
118965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::RunJavaScriptInMainFrame(script, callbackID), m_pageID);
119065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
119165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
119265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::getRenderTreeExternalRepresentation(PassRefPtr<StringCallback> prpCallback)
119365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
119465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<StringCallback> callback = prpCallback;
11952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!isValid()) {
11962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        callback->invalidate();
11972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
11982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
11992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
120065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t callbackID = callback->callbackID();
120165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_stringCallbacks.set(callbackID, callback.get());
120265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::GetRenderTreeExternalRepresentation(callbackID), m_pageID);
120365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
120465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
120565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::getSourceForFrame(WebFrameProxy* frame, PassRefPtr<StringCallback> prpCallback)
120665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
120765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<StringCallback> callback = prpCallback;
12082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!isValid()) {
12092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        callback->invalidate();
12102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
12112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
12122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
121365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t callbackID = callback->callbackID();
12142bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_loadDependentStringCallbackIDs.add(callbackID);
121565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_stringCallbacks.set(callbackID, callback.get());
121665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::GetSourceForFrame(frame->frameID(), callbackID), m_pageID);
121765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
121865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
121965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::getContentsAsString(PassRefPtr<StringCallback> prpCallback)
122065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
122165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<StringCallback> callback = prpCallback;
12222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!isValid()) {
12232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        callback->invalidate();
12242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
12252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
12262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
122765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t callbackID = callback->callbackID();
12282bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_loadDependentStringCallbackIDs.add(callbackID);
122965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_stringCallbacks.set(callbackID, callback.get());
123065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::GetContentsAsString(callbackID), m_pageID);
123165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
123265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
123365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::getSelectionOrContentsAsString(PassRefPtr<StringCallback> prpCallback)
123465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
123565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<StringCallback> callback = prpCallback;
12362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!isValid()) {
12372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        callback->invalidate();
12382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
12392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
12402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
124165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t callbackID = callback->callbackID();
124265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_stringCallbacks.set(callbackID, callback.get());
124365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::GetSelectionOrContentsAsString(callbackID), m_pageID);
124465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
124565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
124665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::getMainResourceDataOfFrame(WebFrameProxy* frame, PassRefPtr<DataCallback> prpCallback)
124765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
124865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<DataCallback> callback = prpCallback;
12492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!isValid()) {
12502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        callback->invalidate();
12512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
12522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
12532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
125465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t callbackID = callback->callbackID();
125565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_dataCallbacks.set(callbackID, callback.get());
125665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::GetMainResourceDataOfFrame(frame->frameID(), callbackID), m_pageID);
125765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
125865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1259ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid WebPageProxy::getResourceDataFromFrame(WebFrameProxy* frame, WebURL* resourceURL, PassRefPtr<DataCallback> prpCallback)
1260ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{
1261ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    RefPtr<DataCallback> callback = prpCallback;
12622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!isValid()) {
12632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        callback->invalidate();
12642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
12652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
12662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1267ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    uint64_t callbackID = callback->callbackID();
1268ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    m_dataCallbacks.set(callbackID, callback.get());
1269ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    process()->send(Messages::WebPage::GetResourceDataFromFrame(frame->frameID(), resourceURL->string(), callbackID), m_pageID);
1270ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}
1271ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
127265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::getWebArchiveOfFrame(WebFrameProxy* frame, PassRefPtr<DataCallback> prpCallback)
127365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
127465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<DataCallback> callback = prpCallback;
12752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!isValid()) {
12762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        callback->invalidate();
12772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
12782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
12792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
128065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t callbackID = callback->callbackID();
128165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_dataCallbacks.set(callbackID, callback.get());
128265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::GetWebArchiveOfFrame(frame->frameID(), callbackID), m_pageID);
128365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
128465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12852fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::forceRepaint(PassRefPtr<VoidCallback> prpCallback)
12862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
12872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<VoidCallback> callback = prpCallback;
12882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!isValid()) {
12892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        callback->invalidate();
12902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
12912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
12922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
12932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    uint64_t callbackID = callback->callbackID();
12942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_voidCallbacks.set(callbackID, callback.get());
12952fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::ForceRepaint(callbackID), m_pageID);
12962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
12972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
129865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::preferencesDidChange()
129965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
130065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
130165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
130265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
130365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: It probably makes more sense to send individual preference changes.
130465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // However, WebKitTestRunner depends on getting a preference change notification
130565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // even if nothing changed in UI process, so that overrides get removed.
130681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
130781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // Preferences need to be updated during synchronous printing to make "print backgrounds" preference work when toggled from a print dialog checkbox.
130881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    process()->send(Messages::WebPage::PreferencesDidChange(pageGroup()->preferences()->store()), m_pageID, m_isPerformingDOMPrintOperation ? CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply : 0);
130965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
131065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
131165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(TILED_BACKING_STORE)
131265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setResizesToContentsUsingLayoutSize(const WebCore::IntSize& targetLayoutSize)
131365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
131465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::SetResizesToContentsUsingLayoutSize(targetLayoutSize), m_pageID);
131565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
131665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
131765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
131865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didReceiveMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments)
131965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
13202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if PLATFORM(MAC) || PLATFORM(WIN)
132165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (messageID.is<CoreIPC::MessageClassDrawingAreaProxy>()) {
132265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_drawingArea->didReceiveDrawingAreaProxyMessage(connection, messageID, arguments);
132365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
132465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
132565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
132665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
132765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (messageID.is<CoreIPC::MessageClassDrawingAreaProxyLegacy>()) {
132865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_drawingArea->didReceiveMessage(connection, messageID, arguments);
132965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
133065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
133165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
133265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(INSPECTOR)
133365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (messageID.is<CoreIPC::MessageClassWebInspectorProxy>()) {
133465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        if (WebInspectorProxy* inspector = this->inspector())
133565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            inspector->didReceiveWebInspectorProxyMessage(connection, messageID, arguments);
133665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
133765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
133865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
133965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
13402bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(FULLSCREEN_API)
13412bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (messageID.is<CoreIPC::MessageClassWebFullScreenManagerProxy>()) {
13422bde8e466a4451c7319e3a072d118917957d6554Steve Block        fullScreenManager()->didReceiveMessage(connection, messageID, arguments);
13432bde8e466a4451c7319e3a072d118917957d6554Steve Block        return;
13442bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
13452bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
13462bde8e466a4451c7319e3a072d118917957d6554Steve Block
134765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    didReceiveWebPageProxyMessage(connection, messageID, arguments);
134865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
134965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
135065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didReceiveSyncMessage(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, CoreIPC::ArgumentEncoder* reply)
135165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
135265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(INSPECTOR)
135365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (messageID.is<CoreIPC::MessageClassWebInspectorProxy>()) {
135465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        if (WebInspectorProxy* inspector = this->inspector())
135565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            inspector->didReceiveSyncWebInspectorProxyMessage(connection, messageID, arguments, reply);
135665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
135765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
135865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
135965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
13602bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(FULLSCREEN_API)
13612bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (messageID.is<CoreIPC::MessageClassWebFullScreenManagerProxy>()) {
13622bde8e466a4451c7319e3a072d118917957d6554Steve Block        fullScreenManager()->didReceiveSyncMessage(connection, messageID, arguments, reply);
13632bde8e466a4451c7319e3a072d118917957d6554Steve Block        return;
13642bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
13652bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
13662bde8e466a4451c7319e3a072d118917957d6554Steve Block
136765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: Do something with reply.
136865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    didReceiveSyncWebPageProxyMessage(connection, messageID, arguments, reply);
136965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
137065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
137165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didCreateMainFrame(uint64_t frameID)
137265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
137365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(!m_mainFrame);
137465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(process()->canCreateFrame(frameID));
137565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
137665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_mainFrame = WebFrameProxy::create(this, frameID);
137765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
137865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Add the frame to the process wide map.
137965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->frameCreated(frameID, m_mainFrame.get());
138065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
138165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
138265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didCreateSubframe(uint64_t frameID, uint64_t parentFrameID)
138365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
138465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(m_mainFrame);
138565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
138665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* parentFrame = process()->webFrame(parentFrameID);
138765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(parentFrame);
138865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(parentFrame->isDescendantOf(m_mainFrame.get()));
138965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
139065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(process()->canCreateFrame(frameID));
139165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
139265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebFrameProxy> subFrame = WebFrameProxy::create(this, frameID);
139365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
139465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Add the frame to the process wide map.
139565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->frameCreated(frameID, subFrame.get());
139665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
139765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Insert the frame into the frame hierarchy.
139865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parentFrame->appendChild(subFrame.get());
139965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
140065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1401ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochstatic bool isDisconnectedFrame(WebFrameProxy* frame)
1402ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{
1403ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    return !frame->page() || !frame->page()->mainFrame() || !frame->isDescendantOf(frame->page()->mainFrame());
1404ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}
1405ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
140665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didSaveFrameToPageCache(uint64_t frameID)
140765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
140865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(m_mainFrame);
140965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
141065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* subframe = process()->webFrame(frameID);
141165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(subframe);
141265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1413ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    if (isDisconnectedFrame(subframe))
141465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
141565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
141665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(subframe->isDescendantOf(m_mainFrame.get()));
141765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
141865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    subframe->didRemoveFromHierarchy();
141965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
142065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
142165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didRestoreFrameFromPageCache(uint64_t frameID, uint64_t parentFrameID)
142265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
142365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(m_mainFrame);
142465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
142565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* subframe = process()->webFrame(frameID);
142665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(subframe);
142765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(!subframe->parentFrame());
142865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(subframe->page() == m_mainFrame->page());
142965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
143065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* parentFrame = process()->webFrame(parentFrameID);
143165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(parentFrame);
143265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(parentFrame->isDescendantOf(m_mainFrame.get()));
143365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
143465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Insert the frame into the frame hierarchy.
143565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parentFrame->appendChild(subframe);
143665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
143765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
14382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
14392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block// Always start progress at initialProgressValue. This helps provide feedback as
14402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block// soon as a load starts.
14412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
14422fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockstatic const double initialProgressValue = 0.1;
14432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
14442fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockdouble WebPageProxy::estimatedProgress() const
14452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
14462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!pendingAPIRequestURL().isNull())
14472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return initialProgressValue;
14482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    return m_estimatedProgress;
14492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
14502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
145165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didStartProgress()
145265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
14532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_estimatedProgress = initialProgressValue;
14542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
145565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didStartProgress(this);
145665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
145765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
145865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didChangeProgress(double value)
145965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
146065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_estimatedProgress = value;
14612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
146265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didChangeProgress(this);
146365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
146465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
146565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didFinishProgress()
146665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
146765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_estimatedProgress = 1.0;
146865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
146965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didFinishProgress(this);
147065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
147165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
14722bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebPageProxy::didStartProvisionalLoadForFrame(uint64_t frameID, const String& url, const String& unreachableURL, CoreIPC::ArgumentDecoder* arguments)
147365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
14742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    clearPendingAPIRequestURL();
14752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
147665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
14772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
147865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
147965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
148065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
148165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
148265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
148365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
14842bde8e466a4451c7319e3a072d118917957d6554Steve Block    frame->setUnreachableURL(unreachableURL);
148565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
148665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    frame->didStartProvisionalLoad(url);
148765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didStartProvisionalLoadForFrame(this, frame, userData.get());
148865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
148965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
149065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didReceiveServerRedirectForProvisionalLoadForFrame(uint64_t frameID, const String& url, CoreIPC::ArgumentDecoder* arguments)
149165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
149265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
14932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
149465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
149565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
149665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
149765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
149865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
149965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
150065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    frame->didReceiveServerRedirectForProvisionalLoad(url);
150165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
150265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didReceiveServerRedirectForProvisionalLoadForFrame(this, frame, userData.get());
150365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
150465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
150565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didFailProvisionalLoadForFrame(uint64_t frameID, const ResourceError& error, CoreIPC::ArgumentDecoder* arguments)
150665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
150765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
15082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
150965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
151065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
151165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
151265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
151365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
151465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
151565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    frame->didFailProvisionalLoad();
151665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
151765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didFailProvisionalLoadWithErrorForFrame(this, frame, error, userData.get());
151865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
151965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15202bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebPageProxy::clearLoadDependentCallbacks()
15212bde8e466a4451c7319e3a072d118917957d6554Steve Block{
15222bde8e466a4451c7319e3a072d118917957d6554Steve Block    Vector<uint64_t> callbackIDsCopy;
15232bde8e466a4451c7319e3a072d118917957d6554Steve Block    copyToVector(m_loadDependentStringCallbackIDs, callbackIDsCopy);
15242bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_loadDependentStringCallbackIDs.clear();
15252bde8e466a4451c7319e3a072d118917957d6554Steve Block
15262bde8e466a4451c7319e3a072d118917957d6554Steve Block    for (size_t i = 0; i < callbackIDsCopy.size(); ++i) {
15272bde8e466a4451c7319e3a072d118917957d6554Steve Block        RefPtr<StringCallback> callback = m_stringCallbacks.take(callbackIDsCopy[i]);
15282bde8e466a4451c7319e3a072d118917957d6554Steve Block        if (callback)
15292bde8e466a4451c7319e3a072d118917957d6554Steve Block            callback->invalidate();
15302bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
15312bde8e466a4451c7319e3a072d118917957d6554Steve Block}
15322bde8e466a4451c7319e3a072d118917957d6554Steve Block
153365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didCommitLoadForFrame(uint64_t frameID, const String& mimeType, bool frameHasCustomRepresentation, const PlatformCertificateInfo& certificateInfo, CoreIPC::ArgumentDecoder* arguments)
153465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
153565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
15362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
153765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
153865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
153965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15402bde8e466a4451c7319e3a072d118917957d6554Steve Block#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD)
15412bde8e466a4451c7319e3a072d118917957d6554Steve Block    dismissCorrectionPanel(ReasonForDismissingCorrectionPanelIgnored);
15422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_pageClient->dismissDictionaryLookupPanel();
15432bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
15442bde8e466a4451c7319e3a072d118917957d6554Steve Block
154565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
154665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
154765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15482bde8e466a4451c7319e3a072d118917957d6554Steve Block    clearLoadDependentCallbacks();
15492bde8e466a4451c7319e3a072d118917957d6554Steve Block
155065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    frame->didCommitLoad(mimeType, certificateInfo);
155165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
155265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (frame->isMainFrame()) {
155365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_mainFrameHasCustomRepresentation = frameHasCustomRepresentation;
155465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_pageClient->didCommitLoadForMainFrame(frameHasCustomRepresentation);
155565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
155665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
155765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didCommitLoadForFrame(this, frame, userData.get());
155865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
155965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
156065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didFinishDocumentLoadForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder* arguments)
156165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
156265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
15632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
156465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
156565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
156665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
156765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
156865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
156965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
157065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didFinishDocumentLoadForFrame(this, frame, userData.get());
157165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
157265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
157365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didFinishLoadForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder* arguments)
157465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
157565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
15762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
157765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
157865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
157965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
158065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
158165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
158265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
158365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    frame->didFinishLoad();
158465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
158565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didFinishLoadForFrame(this, frame, userData.get());
158665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
158765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
158865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didFailLoadForFrame(uint64_t frameID, const ResourceError& error, CoreIPC::ArgumentDecoder* arguments)
158965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
159065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
15912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
159265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
159365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
159465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
159565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
159665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
159765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15982bde8e466a4451c7319e3a072d118917957d6554Steve Block    clearLoadDependentCallbacks();
15992bde8e466a4451c7319e3a072d118917957d6554Steve Block
160065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    frame->didFailLoad();
160165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
160265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didFailLoadWithErrorForFrame(this, frame, error, userData.get());
160365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
160465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
160565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didSameDocumentNavigationForFrame(uint64_t frameID, uint32_t opaqueSameDocumentNavigationType, const String& url, CoreIPC::ArgumentDecoder* arguments)
160665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
160765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
16082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
160965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
161065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
161165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
161265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
161365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
161465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
161565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    frame->didSameDocumentNavigation(url);
161665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
161765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didSameDocumentNavigationForFrame(this, frame, static_cast<SameDocumentNavigationType>(opaqueSameDocumentNavigationType), userData.get());
161865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
161965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
162065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didReceiveTitleForFrame(uint64_t frameID, const String& title, CoreIPC::ArgumentDecoder* arguments)
162165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
162265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
16232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
162465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
162565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
162665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
162765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
162865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
162965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
163065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    frame->didChangeTitle(title);
163165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
163265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didReceiveTitleForFrame(this, title, frame, userData.get());
163365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
163465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
163565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didFirstLayoutForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder* arguments)
163665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
163765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
16382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
163965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
164065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
164165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
164265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
164365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
164465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
164565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didFirstLayoutForFrame(this, frame, userData.get());
164665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
164765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
164865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didFirstVisuallyNonEmptyLayoutForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder* arguments)
164965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
165065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
16512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
165265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
165365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
165465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
165565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
165665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
165765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
165865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didFirstVisuallyNonEmptyLayoutForFrame(this, frame, userData.get());
165965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
166065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
166165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didRemoveFrameFromHierarchy(uint64_t frameID, CoreIPC::ArgumentDecoder* arguments)
166265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
166365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
16642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
166565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
166665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
166765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
166865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
166965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
167065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
167165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    frame->didRemoveFromHierarchy();
167265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
167365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didRemoveFrameFromHierarchy(this, frame, userData.get());
167465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
167565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
167665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didDisplayInsecureContentForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder* arguments)
167765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
167865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
16792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
168065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
168165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
168265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
168365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
168465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
168565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
168665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didDisplayInsecureContentForFrame(this, frame, userData.get());
168765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
168865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
168965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didRunInsecureContentForFrame(uint64_t frameID, CoreIPC::ArgumentDecoder* arguments)
169065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
169165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
16922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
169365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
169465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
169565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
169665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
169765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
169865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
169965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didRunInsecureContentForFrame(this, frame, userData.get());
170065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
170165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
170265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::frameDidBecomeFrameSet(uint64_t frameID, bool value)
170365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
170465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
170565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
170665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
170765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    frame->setIsFrameSet(value);
170865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (frame->isMainFrame())
170965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_frameSetLargestFrame = value ? m_mainFrame : 0;
171065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
171165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
171265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// PolicyClient
171381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::decidePolicyForNavigationAction(uint64_t frameID, uint32_t opaqueNavigationType, uint32_t opaqueModifiers, int32_t opaqueMouseButton, const ResourceRequest& request, uint64_t listenerID, CoreIPC::ArgumentDecoder* arguments, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID)
171465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
17152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<APIObject> userData;
17162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
17172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!arguments->decode(messageDecoder))
17182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
17192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
17202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (request.url() != pendingAPIRequestURL())
17212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        clearPendingAPIRequestURL();
17222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
172365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
172465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
172565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
172665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    NavigationType navigationType = static_cast<NavigationType>(opaqueNavigationType);
172765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebEvent::Modifiers modifiers = static_cast<WebEvent::Modifiers>(opaqueModifiers);
172865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebMouseEvent::Button mouseButton = static_cast<WebMouseEvent::Button>(opaqueMouseButton);
172965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
173065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebFramePolicyListenerProxy> listener = frame->setUpPolicyListenerProxy(listenerID);
17312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
17322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    ASSERT(!m_inDecidePolicyForNavigationAction);
17332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
17342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_inDecidePolicyForNavigationAction = true;
17352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_syncNavigationActionPolicyActionIsValid = false;
17362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
17372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!m_policyClient.decidePolicyForNavigationAction(this, frame, navigationType, modifiers, mouseButton, request, listener.get(), userData.get()))
173865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        listener->use();
17392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
17402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_inDecidePolicyForNavigationAction = false;
17412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
17422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // Check if we received a policy decision already. If we did, we can just pass it back.
174381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    receivedPolicyAction = m_syncNavigationActionPolicyActionIsValid;
17442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (m_syncNavigationActionPolicyActionIsValid) {
17452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        policyAction = m_syncNavigationActionPolicyAction;
174681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        downloadID = m_syncNavigationActionPolicyDownloadID;
17472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
174865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
174965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17502fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::decidePolicyForNewWindowAction(uint64_t frameID, uint32_t opaqueNavigationType, uint32_t opaqueModifiers, int32_t opaqueMouseButton, const ResourceRequest& request, const String& frameName, uint64_t listenerID, CoreIPC::ArgumentDecoder* arguments)
175165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
17522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<APIObject> userData;
17532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
17542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!arguments->decode(messageDecoder))
17552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
17562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
175765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
175865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
175965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
176065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    NavigationType navigationType = static_cast<NavigationType>(opaqueNavigationType);
176165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebEvent::Modifiers modifiers = static_cast<WebEvent::Modifiers>(opaqueModifiers);
176265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebMouseEvent::Button mouseButton = static_cast<WebMouseEvent::Button>(opaqueMouseButton);
176365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
176465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebFramePolicyListenerProxy> listener = frame->setUpPolicyListenerProxy(listenerID);
17652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!m_policyClient.decidePolicyForNewWindowAction(this, frame, navigationType, modifiers, mouseButton, request, frameName, listener.get(), userData.get()))
176665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        listener->use();
176765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
176865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
176981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::decidePolicyForResponse(uint64_t frameID, const ResourceResponse& response, const ResourceRequest& request, uint64_t listenerID, CoreIPC::ArgumentDecoder* arguments, bool& receivedPolicyAction, uint64_t& policyAction, uint64_t& downloadID)
177065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
17712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<APIObject> userData;
17722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
17732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!arguments->decode(messageDecoder))
17742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
17752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
177665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
177765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
177865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
177965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebFramePolicyListenerProxy> listener = frame->setUpPolicyListenerProxy(listenerID);
178065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
178165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(!m_inDecidePolicyForMIMEType);
178265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
178365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_inDecidePolicyForMIMEType = true;
178465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_syncMimeTypePolicyActionIsValid = false;
178565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
178681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!m_policyClient.decidePolicyForResponse(this, frame, response, request, listener.get(), userData.get()))
178765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        listener->use();
178865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
178965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_inDecidePolicyForMIMEType = false;
179065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
179165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Check if we received a policy decision already. If we did, we can just pass it back.
179281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    receivedPolicyAction = m_syncMimeTypePolicyActionIsValid;
179365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_syncMimeTypePolicyActionIsValid) {
179465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        policyAction = m_syncMimeTypePolicyAction;
179565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        downloadID = m_syncMimeTypePolicyDownloadID;
179665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
179765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
179865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
179981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::unableToImplementPolicy(uint64_t frameID, const WebCore::ResourceError& error, CoreIPC::ArgumentDecoder* arguments)
180081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
180181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<APIObject> userData;
18022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
180381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!arguments->decode(messageDecoder))
180481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
180581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
180681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
180781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    MESSAGE_CHECK(frame);
180881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
180981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_policyClient.unableToImplementPolicy(this, frame, error, userData.get());
181081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
181181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
181265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// FormClient
181365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
181465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::willSubmitForm(uint64_t frameID, uint64_t sourceFrameID, const StringPairVector& textFieldValues, uint64_t listenerID, CoreIPC::ArgumentDecoder* arguments)
181565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
181665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
18172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
181865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
181965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
182065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
182165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
182265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
182365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
182465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* sourceFrame = process()->webFrame(sourceFrameID);
182565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(sourceFrame);
182665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
182765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebFormSubmissionListenerProxy> listener = frame->setUpFormSubmissionListenerProxy(listenerID);
182865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_formClient.willSubmitForm(this, frame, sourceFrame, textFieldValues.stringPairVector(), userData.get(), listener.get()))
182965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        listener->continueSubmission();
183065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
183165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
183265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// ResourceLoad Client
183365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18342fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::didInitiateLoadForResource(uint64_t frameID, uint64_t resourceIdentifier, const ResourceRequest& request, bool pageIsProvisionallyLoading)
183565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
183665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
183765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
183865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_resourceLoadClient.didInitiateLoadForResource(this, frame, resourceIdentifier, request, pageIsProvisionallyLoading);
184065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
184165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
184265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didSendRequestForResource(uint64_t frameID, uint64_t resourceIdentifier, const ResourceRequest& request, const ResourceResponse& redirectResponse)
184365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
184465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
184565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
184665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
184765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_resourceLoadClient.didSendRequestForResource(this, frame, resourceIdentifier, request, redirectResponse);
184865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
184965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
185065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didReceiveResponseForResource(uint64_t frameID, uint64_t resourceIdentifier, const ResourceResponse& response)
185165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
185265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
185365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
185465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
185565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_resourceLoadClient.didReceiveResponseForResource(this, frame, resourceIdentifier, response);
185665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
185765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
185865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didReceiveContentLengthForResource(uint64_t frameID, uint64_t resourceIdentifier, uint64_t contentLength)
185965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
186065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
186165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
186265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
186365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_resourceLoadClient.didReceiveContentLengthForResource(this, frame, resourceIdentifier, contentLength);
186465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
186565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
186665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didFinishLoadForResource(uint64_t frameID, uint64_t resourceIdentifier)
186765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
186865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
186965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
187065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
187165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_resourceLoadClient.didFinishLoadForResource(this, frame, resourceIdentifier);
187265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
187365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
187465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didFailLoadForResource(uint64_t frameID, uint64_t resourceIdentifier, const ResourceError& error)
187565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
187665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
187765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
187865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
187965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_resourceLoadClient.didFailLoadForResource(this, frame, resourceIdentifier, error);
188065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
188165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
188265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// UIClient
188365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
188465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::createNewPage(const WindowFeatures& windowFeatures, uint32_t opaqueModifiers, int32_t opaqueMouseButton, uint64_t& newPageID, WebPageCreationParameters& newPageParameters)
188565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
188665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebPageProxy> newPage = m_uiClient.createNewPage(this, windowFeatures, static_cast<WebEvent::Modifiers>(opaqueModifiers), static_cast<WebMouseEvent::Button>(opaqueMouseButton));
188765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (newPage) {
188865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        newPageID = newPage->pageID();
188965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        newPageParameters = newPage->creationParameters();
189065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    } else
189165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        newPageID = 0;
189265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
189365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
189465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::showPage()
189565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
189665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.showPage(this);
189765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
189865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
189965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::closePage()
190065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
190165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.close(this);
190265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
190365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
190465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::runJavaScriptAlert(uint64_t frameID, const String& message)
190565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
190665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
190765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
190865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19092bde8e466a4451c7319e3a072d118917957d6554Steve Block    // Since runJavaScriptAlert() can spin a nested run loop we need to turn off the responsiveness timer.
19102bde8e466a4451c7319e3a072d118917957d6554Steve Block    process()->responsivenessTimer()->stop();
19112bde8e466a4451c7319e3a072d118917957d6554Steve Block
191265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.runJavaScriptAlert(this, message, frame);
191365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
191465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
191565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::runJavaScriptConfirm(uint64_t frameID, const String& message, bool& result)
191665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
191765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
191865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
191965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19202bde8e466a4451c7319e3a072d118917957d6554Steve Block    // Since runJavaScriptConfirm() can spin a nested run loop we need to turn off the responsiveness timer.
19212bde8e466a4451c7319e3a072d118917957d6554Steve Block    process()->responsivenessTimer()->stop();
19222bde8e466a4451c7319e3a072d118917957d6554Steve Block
192365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    result = m_uiClient.runJavaScriptConfirm(this, message, frame);
192465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
192565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
192665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::runJavaScriptPrompt(uint64_t frameID, const String& message, const String& defaultValue, String& result)
192765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
192865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
192965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
193065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19312bde8e466a4451c7319e3a072d118917957d6554Steve Block    // Since runJavaScriptPrompt() can spin a nested run loop we need to turn off the responsiveness timer.
19322bde8e466a4451c7319e3a072d118917957d6554Steve Block    process()->responsivenessTimer()->stop();
19332bde8e466a4451c7319e3a072d118917957d6554Steve Block
193465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    result = m_uiClient.runJavaScriptPrompt(this, message, defaultValue, frame);
193565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
193665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
193765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setStatusText(const String& text)
193865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
193965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.setStatusText(this, text);
194065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
194165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
194265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::mouseDidMoveOverElement(uint32_t opaqueModifiers, CoreIPC::ArgumentDecoder* arguments)
194365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
194465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
19452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
194665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
194765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
194865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
194965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebEvent::Modifiers modifiers = static_cast<WebEvent::Modifiers>(opaqueModifiers);
195065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
195165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.mouseDidMoveOverElement(this, modifiers, userData.get());
195265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
195365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
195481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::missingPluginButtonClicked(const String& mimeType, const String& url, const String& pluginsPageURL)
195565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
195681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_uiClient.missingPluginButtonClicked(this, mimeType, url, pluginsPageURL);
195765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
195865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
195965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setToolbarsAreVisible(bool toolbarsAreVisible)
196065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
196165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.setToolbarsAreVisible(this, toolbarsAreVisible);
196265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
196365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
196465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::getToolbarsAreVisible(bool& toolbarsAreVisible)
196565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
196665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    toolbarsAreVisible = m_uiClient.toolbarsAreVisible(this);
196765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
196865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
196965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setMenuBarIsVisible(bool menuBarIsVisible)
197065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
197165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.setMenuBarIsVisible(this, menuBarIsVisible);
197265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
197365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
197465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::getMenuBarIsVisible(bool& menuBarIsVisible)
197565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
197665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    menuBarIsVisible = m_uiClient.menuBarIsVisible(this);
197765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
197865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
197965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setStatusBarIsVisible(bool statusBarIsVisible)
198065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
198165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.setStatusBarIsVisible(this, statusBarIsVisible);
198265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
198365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
198465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::getStatusBarIsVisible(bool& statusBarIsVisible)
198565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
198665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    statusBarIsVisible = m_uiClient.statusBarIsVisible(this);
198765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
198865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
198965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setIsResizable(bool isResizable)
199065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
199165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.setIsResizable(this, isResizable);
199265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
199365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
199465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::getIsResizable(bool& isResizable)
199565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
199665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    isResizable = m_uiClient.isResizable(this);
199765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
199865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
199965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setWindowFrame(const FloatRect& newWindowFrame)
200065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
200165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.setWindowFrame(this, m_pageClient->convertToDeviceSpace(newWindowFrame));
200265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
200365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
200465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::getWindowFrame(FloatRect& newWindowFrame)
200565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
200665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    newWindowFrame = m_pageClient->convertToUserSpace(m_uiClient.windowFrame(this));
200765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
200865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
20092bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebPageProxy::windowToScreen(const IntRect& viewRect, IntRect& result)
20102bde8e466a4451c7319e3a072d118917957d6554Steve Block{
20112bde8e466a4451c7319e3a072d118917957d6554Steve Block    result = m_pageClient->windowToScreen(viewRect);
20122bde8e466a4451c7319e3a072d118917957d6554Steve Block}
20132bde8e466a4451c7319e3a072d118917957d6554Steve Block
201465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::runBeforeUnloadConfirmPanel(const String& message, uint64_t frameID, bool& shouldClose)
201565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
201665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
201765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
201865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
201965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    shouldClose = m_uiClient.runBeforeUnloadConfirmPanel(this, message, frame);
202065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
202165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
202265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(TILED_BACKING_STORE)
20232bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebPageProxy::pageDidRequestScroll(const IntPoint& point)
202465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
20252bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_pageClient->pageDidRequestScroll(point);
202665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
202765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
202865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
202965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didChangeViewportData(const ViewportArguments& args)
203065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
203165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->setViewportArguments(args);
203265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
203365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
203465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::pageDidScroll()
203565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
203665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.pageDidScroll(this);
203765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
203865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
203965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::runOpenPanel(uint64_t frameID, const WebOpenPanelParameters::Data& data)
204065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
204165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_openPanelResultListener) {
204265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_openPanelResultListener->invalidate();
204365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_openPanelResultListener = 0;
204465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
204565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
204665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
204765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
204865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
204965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_openPanelResultListener = WebOpenPanelResultListenerProxy::create(this);
205065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
205165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_uiClient.runOpenPanel(this, frame, data, m_openPanelResultListener.get()))
205265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        didCancelForOpenPanel();
205365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
205465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2055ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid WebPageProxy::printFrame(uint64_t frameID)
2056ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{
20572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    ASSERT(!m_isPerformingDOMPrintOperation);
20582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_isPerformingDOMPrintOperation = true;
20592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
2060ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
2061ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    MESSAGE_CHECK(frame);
2062ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
2063ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    m_uiClient.printFrame(this, frame);
20642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
20652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_isPerformingDOMPrintOperation = false;
2066ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}
2067ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
206865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(QT)
206965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didChangeContentsSize(const WebCore::IntSize& size)
207065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
207165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->didChangeContentsSize(size);
207265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
207365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
207465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didFindZoomableArea(const WebCore::IntRect& area)
207565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
207665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->didFindZoomableArea(area);
207765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
207865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
207965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::findZoomableAreaForPoint(const WebCore::IntPoint& point)
208065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
208165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
208265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
208365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
208465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::FindZoomableAreaForPoint(point), m_pageID);
208565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
208665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
208765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
208865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didDraw()
208965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
209065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_uiClient.didDraw(this);
209165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
209265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
209365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// Inspector
209465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
209565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(INSPECTOR)
209665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
209765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebInspectorProxy* WebPageProxy::inspector()
209865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
209965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (isClosed() || !isValid())
210065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return 0;
210165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_inspector)
210265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_inspector = WebInspectorProxy::create(this);
210365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_inspector.get();
210465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
210565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
210665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
210765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21082bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(FULLSCREEN_API)
21092bde8e466a4451c7319e3a072d118917957d6554Steve BlockWebFullScreenManagerProxy* WebPageProxy::fullScreenManager()
21102bde8e466a4451c7319e3a072d118917957d6554Steve Block{
21112bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!m_fullScreenManager)
21122bde8e466a4451c7319e3a072d118917957d6554Steve Block        m_fullScreenManager = WebFullScreenManagerProxy::create(this);
21132bde8e466a4451c7319e3a072d118917957d6554Steve Block    return m_fullScreenManager.get();
21142bde8e466a4451c7319e3a072d118917957d6554Steve Block}
21152bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
21162bde8e466a4451c7319e3a072d118917957d6554Steve Block
211765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// BackForwardList
211865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
211965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::backForwardAddItem(uint64_t itemID)
212065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
212165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_backForwardList->addItem(process()->webBackForwardItem(itemID));
212265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
212365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
212465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::backForwardGoToItem(uint64_t itemID)
212565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
212665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_backForwardList->goToItem(process()->webBackForwardItem(itemID));
212765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
212865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
212965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::backForwardItemAtIndex(int32_t index, uint64_t& itemID)
213065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
213165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebBackForwardListItem* item = m_backForwardList->itemAtIndex(index);
213265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    itemID = item ? item->itemID() : 0;
213365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
213465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
213565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::backForwardBackListCount(int32_t& count)
213665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
213765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    count = m_backForwardList->backListCount();
213865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
213965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
214065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::backForwardForwardListCount(int32_t& count)
214165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
214265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    count = m_backForwardList->forwardListCount();
214365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
214465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::editorStateChanged(const EditorState& editorState)
214665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
21472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(MAC)
21482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool couldChangeSecureInputState = m_editorState.isInPasswordField != editorState.isInPasswordField || m_editorState.selectionIsNone;
21492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
21502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
21512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_editorState = editorState;
21522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
21532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(MAC)
21542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // This is a temporary state. Flipping secure input state too quickly can expose race conditions.
21552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (editorState.selectionIsNone)
21562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
21572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
21582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (couldChangeSecureInputState)
21592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_pageClient->updateSecureInputState();
21602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
216165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
216265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
216365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(WIN)
216465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didChangeCompositionSelection(bool hasComposition)
216565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
216665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->compositionSelectionChanged(hasComposition);
216765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
216865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
216965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::confirmComposition(const String& compositionString)
217065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
217165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::ConfirmComposition(compositionString), m_pageID);
217265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
217365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
217465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setComposition(const String& compositionString, Vector<WebCore::CompositionUnderline>& underlines, int cursorPosition)
217565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
217665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::SetComposition(compositionString, underlines, cursorPosition), m_pageID);
217765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
217865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
217965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
218065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// Undo management
218165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
218265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::registerEditCommandForUndo(uint64_t commandID, uint32_t editAction)
218365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
218465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    registerEditCommand(WebEditCommandProxy::create(commandID, static_cast<EditAction>(editAction), this), Undo);
218565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
218665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::canUndoRedo(uint32_t action, bool& result)
21882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
21892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    result = m_pageClient->canUndoRedo(static_cast<UndoOrRedo>(action));
21902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
21912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
21922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::executeUndoRedo(uint32_t action, bool& result)
21932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
21942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_pageClient->executeUndoRedo(static_cast<UndoOrRedo>(action));
21952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    result = true;
21962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
21972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
219865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::clearAllEditCommands()
219965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
220065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->clearAllEditCommands();
220165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
220265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
220365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didCountStringMatches(const String& string, uint32_t matchCount)
220465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
220565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_findClient.didCountStringMatches(this, string, matchCount);
220665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
220765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22082bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebPageProxy::setFindIndicator(const FloatRect& selectionRectInWindowCoordinates, const Vector<FloatRect>& textRectsInSelectionRectCoordinates, const ShareableBitmap::Handle& contentImageHandle, bool fadeOut)
220965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
22102fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<FindIndicator> findIndicator = FindIndicator::create(selectionRectInWindowCoordinates, textRectsInSelectionRectCoordinates, contentImageHandle);
221165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->setFindIndicator(findIndicator.release(), fadeOut);
221265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
221365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
221465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didFindString(const String& string, uint32_t matchCount)
221565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
221665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_findClient.didFindString(this, string, matchCount);
221765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
221865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
221965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didFailToFindString(const String& string)
222065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
222165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_findClient.didFailToFindString(this, string);
222265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
222365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
222465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::valueChangedForPopupMenu(WebPopupMenuProxy*, int32_t newSelectedIndex)
222565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
222665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::DidChangeSelectedIndexForActivePopupMenu(newSelectedIndex), m_pageID);
222765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
222865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
222965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setTextFromItemForPopupMenu(WebPopupMenuProxy*, int32_t index)
223065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
223165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::SetTextForActivePopupMenu(index), m_pageID);
223265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
223365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochNativeWebMouseEvent* WebPageProxy::currentlyProcessedMouseDownEvent()
22352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
22362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    return m_currentlyProcessedMouseDownEvent.get();
22372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
22382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
22392fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::showPopupMenu(const IntRect& rect, uint64_t textDirection, const Vector<WebPopupItem>& items, int32_t selectedIndex, const PlatformPopupMenuData& data)
224065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
22412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (m_activePopupMenu) {
224265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_activePopupMenu->hidePopupMenu();
22432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        m_activePopupMenu->invalidate();
22442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        m_activePopupMenu = 0;
22452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
22462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
22472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_activePopupMenu = m_pageClient->createPopupMenuProxy(this);
224865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
224981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // Since showPopupMenu() can spin a nested run loop we need to turn off the responsiveness timer.
225065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->responsivenessTimer()->stop();
225165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<WebPopupMenuProxy> protectedActivePopupMenu = m_activePopupMenu;
22532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
225481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    protectedActivePopupMenu->showPopupMenu(rect, static_cast<TextDirection>(textDirection), m_viewScaleFactor, items, data, selectedIndex);
22552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    protectedActivePopupMenu->invalidate();
22562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    protectedActivePopupMenu = 0;
225765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
225865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
225965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::hidePopupMenu()
226065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
226165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_activePopupMenu)
226265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
226365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
226465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_activePopupMenu->hidePopupMenu();
22652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_activePopupMenu->invalidate();
226665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_activePopupMenu = 0;
226765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
226865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
226965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::showContextMenu(const IntPoint& menuLocation, const ContextMenuState& contextMenuState, const Vector<WebContextMenuItemData>& proposedItems, CoreIPC::ArgumentDecoder* arguments)
227065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
22712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    internalShowContextMenu(menuLocation, contextMenuState, proposedItems, arguments);
22722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
22732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // No matter the result of internalShowContextMenu, always notify the WebProcess that the menu is hidden so it starts handling mouse events again.
22742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    process()->send(Messages::WebPage::ContextMenuHidden(), m_pageID);
22752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
22762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
22772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::internalShowContextMenu(const IntPoint& menuLocation, const ContextMenuState& contextMenuState, const Vector<WebContextMenuItemData>& proposedItems, CoreIPC::ArgumentDecoder* arguments)
22782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
227965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
22802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    WebContextUserMessageDecoder messageDecoder(userData, m_process->context());
228165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!arguments->decode(messageDecoder))
228265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
228365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
228465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_activeContextMenuState = contextMenuState;
228565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
22862bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (m_activeContextMenu) {
228765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_activeContextMenu->hideContextMenu();
22882bde8e466a4451c7319e3a072d118917957d6554Steve Block        m_activeContextMenu = 0;
22892bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
22902bde8e466a4451c7319e3a072d118917957d6554Steve Block
22912bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_activeContextMenu = m_pageClient->createContextMenuProxy(this);
22922bde8e466a4451c7319e3a072d118917957d6554Steve Block
22932bde8e466a4451c7319e3a072d118917957d6554Steve Block    // Since showContextMenu() can spin a nested run loop we need to turn off the responsiveness timer.
22942bde8e466a4451c7319e3a072d118917957d6554Steve Block    process()->responsivenessTimer()->stop();
229565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
229665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Give the PageContextMenuClient one last swipe at changing the menu.
229765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    Vector<WebContextMenuItemData> items;
22982bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!m_contextMenuClient.getContextMenuFromProposedMenu(this, proposedItems, items, userData.get()))
229965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_activeContextMenu->showContextMenu(menuLocation, proposedItems);
23002bde8e466a4451c7319e3a072d118917957d6554Steve Block    else
230165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_activeContextMenu->showContextMenu(menuLocation, items);
230265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
230365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
230465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::contextMenuItemSelected(const WebContextMenuItemData& item)
230565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
230665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Application custom items don't need to round-trip through to WebCore in the WebProcess.
230765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (item.action() >= ContextMenuItemBaseApplicationTag) {
230865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_contextMenuClient.customContextMenuItemSelected(this, item);
230965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
231065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
231165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
231265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC)
231365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (item.action() == ContextMenuItemTagSmartCopyPaste) {
231465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        setSmartInsertDeleteEnabled(!isSmartInsertDeleteEnabled());
231565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
231665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
231765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (item.action() == ContextMenuItemTagSmartQuotes) {
231865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        TextChecker::setAutomaticQuoteSubstitutionEnabled(!TextChecker::state().isAutomaticQuoteSubstitutionEnabled);
231965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        process()->updateTextCheckerState();
232065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
232165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
232265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (item.action() == ContextMenuItemTagSmartDashes) {
232365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        TextChecker::setAutomaticDashSubstitutionEnabled(!TextChecker::state().isAutomaticDashSubstitutionEnabled);
232465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        process()->updateTextCheckerState();
232565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
232665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
232765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (item.action() == ContextMenuItemTagSmartLinks) {
232865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        TextChecker::setAutomaticLinkDetectionEnabled(!TextChecker::state().isAutomaticLinkDetectionEnabled);
232965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        process()->updateTextCheckerState();
233065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
233165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
233265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (item.action() == ContextMenuItemTagTextReplacement) {
233365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        TextChecker::setAutomaticTextReplacementEnabled(!TextChecker::state().isAutomaticTextReplacementEnabled);
233465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        process()->updateTextCheckerState();
233565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
233665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
23372bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (item.action() == ContextMenuItemTagCorrectSpellingAutomatically) {
23382bde8e466a4451c7319e3a072d118917957d6554Steve Block        TextChecker::setAutomaticSpellingCorrectionEnabled(!TextChecker::state().isAutomaticSpellingCorrectionEnabled);
23392bde8e466a4451c7319e3a072d118917957d6554Steve Block        process()->updateTextCheckerState();
23402bde8e466a4451c7319e3a072d118917957d6554Steve Block        return;
23412bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
23422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (item.action() == ContextMenuItemTagShowSubstitutions) {
23432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        TextChecker::toggleSubstitutionsPanelIsShowing();
23442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
23452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
234665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
234765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (item.action() == ContextMenuItemTagDownloadImageToDisk) {
23482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_process->context()->download(this, KURL(KURL(), m_activeContextMenuState.absoluteImageURLString));
234965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
235065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
235165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (item.action() == ContextMenuItemTagDownloadLinkToDisk) {
23522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_process->context()->download(this, KURL(KURL(), m_activeContextMenuState.absoluteLinkURLString));
235365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
235465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
23552bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (item.action() == ContextMenuItemTagCheckSpellingWhileTyping) {
23562bde8e466a4451c7319e3a072d118917957d6554Steve Block        TextChecker::setContinuousSpellCheckingEnabled(!TextChecker::state().isContinuousSpellCheckingEnabled);
23572bde8e466a4451c7319e3a072d118917957d6554Steve Block        process()->updateTextCheckerState();
23582bde8e466a4451c7319e3a072d118917957d6554Steve Block        return;
23592bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
23602bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (item.action() == ContextMenuItemTagCheckGrammarWithSpelling) {
23612bde8e466a4451c7319e3a072d118917957d6554Steve Block        TextChecker::setGrammarCheckingEnabled(!TextChecker::state().isGrammarCheckingEnabled);
23622bde8e466a4451c7319e3a072d118917957d6554Steve Block        process()->updateTextCheckerState();
23632bde8e466a4451c7319e3a072d118917957d6554Steve Block        return;
23642bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
23652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (item.action() == ContextMenuItemTagShowSpellingPanel) {
23662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        if (!TextChecker::spellingUIIsShowing())
23672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            advanceToNextMisspelling(true);
23682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        TextChecker::toggleSpellingUIIsShowing();
23692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
23702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
237165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (item.action() == ContextMenuItemTagLearnSpelling || item.action() == ContextMenuItemTagIgnoreSpelling)
237265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        ++m_pendingLearnOrIgnoreWordMessageCount;
237365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
237465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::DidSelectItemFromActiveContextMenu(item), m_pageID);
237565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
237665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
237765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didChooseFilesForOpenPanel(const Vector<String>& fileURLs)
237865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
237965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
238065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
238165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
23822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(WEB_PROCESS_SANDBOX)
23832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // FIXME: The sandbox extensions should be sent with the DidChooseFilesForOpenPanel message. This
23842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // is gated on a way of passing SandboxExtension::Handles in a Vector.
23852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    for (size_t i = 0; i < fileURLs.size(); ++i) {
23862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        SandboxExtension::Handle sandboxExtensionHandle;
23872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        SandboxExtension::createHandle(fileURLs[i], SandboxExtension::ReadOnly, sandboxExtensionHandle);
23882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        process()->send(Messages::WebPage::ExtendSandboxForFileFromOpenPanel(sandboxExtensionHandle), m_pageID);
23892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
23902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
23912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
239265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::DidChooseFilesForOpenPanel(fileURLs), m_pageID);
239365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
239465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_openPanelResultListener->invalidate();
239565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_openPanelResultListener = 0;
239665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
239765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
239865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didCancelForOpenPanel()
239965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
240065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
240165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
240265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
240365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::DidCancelForOpenPanel(), m_pageID);
240465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
240565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_openPanelResultListener->invalidate();
240665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_openPanelResultListener = 0;
240765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
240865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::advanceToNextMisspelling(bool startBeforeSelection) const
241065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
241165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::AdvanceToNextMisspelling(startBeforeSelection), m_pageID);
241265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
241365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::changeSpellingToWord(const String& word) const
241565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
241665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (word.isEmpty())
241765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
241865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
241965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::ChangeSpellingToWord(word), m_pageID);
242065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
242165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
242265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::registerEditCommand(PassRefPtr<WebEditCommandProxy> commandProxy, UndoOrRedo undoOrRedo)
242365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
242465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->registerEditCommand(commandProxy, undoOrRedo);
242565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
242665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
242765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::addEditCommand(WebEditCommandProxy* command)
242865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
242965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_editCommandSet.add(command);
243065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
243165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
243265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::removeEditCommand(WebEditCommandProxy* command)
243365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
243465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_editCommandSet.remove(command);
243565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
243665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!isValid())
243765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
243865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::DidRemoveEditCommand(command->commandID()), m_pageID);
243965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
244065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24412bde8e466a4451c7319e3a072d118917957d6554Steve Blockbool WebPageProxy::isValidEditCommand(WebEditCommandProxy* command)
24422bde8e466a4451c7319e3a072d118917957d6554Steve Block{
24432bde8e466a4451c7319e3a072d118917957d6554Steve Block    return m_editCommandSet.find(command) != m_editCommandSet.end();
24442bde8e466a4451c7319e3a072d118917957d6554Steve Block}
24452bde8e466a4451c7319e3a072d118917957d6554Steve Block
244665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochint64_t WebPageProxy::spellDocumentTag()
244765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
244865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_hasSpellDocumentTag) {
24492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_spellDocumentTag = TextChecker::uniqueSpellDocumentTag(this);
245065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_hasSpellDocumentTag = true;
245165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
245265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
245365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_spellDocumentTag;
245465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
245565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(UNIFIED_TEXT_CHECKING)
24572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
245865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::checkTextOfParagraph(const String& text, uint64_t checkingTypes, Vector<TextCheckingResult>& results)
245965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
246065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    results = TextChecker::checkTextOfParagraph(spellDocumentTag(), text.characters(), text.length(), checkingTypes);
246165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
246265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
24642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
24652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::checkSpellingOfString(const String& text, int32_t& misspellingLocation, int32_t& misspellingLength)
24662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
24672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    TextChecker::checkSpellingOfString(spellDocumentTag(), text.characters(), text.length(), misspellingLocation, misspellingLength);
24682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
24692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
24702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::checkGrammarOfString(const String& text, Vector<WebCore::GrammarDetail>& grammarDetails, int32_t& badGrammarLocation, int32_t& badGrammarLength)
24712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
24722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    TextChecker::checkGrammarOfString(spellDocumentTag(), text.characters(), text.length(), grammarDetails, badGrammarLocation, badGrammarLength);
24732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
24742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
24752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::spellingUIIsShowing(bool& isShowing)
24762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
24772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    isShowing = TextChecker::spellingUIIsShowing();
24782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
24792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
248065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::updateSpellingUIWithMisspelledWord(const String& misspelledWord)
248165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
24822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    TextChecker::updateSpellingUIWithMisspelledWord(spellDocumentTag(), misspelledWord);
248365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
248465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
248581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::updateSpellingUIWithGrammarString(const String& badGrammarPhrase, const GrammarDetail& grammarDetail)
248681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
24872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    TextChecker::updateSpellingUIWithGrammarString(spellDocumentTag(), badGrammarPhrase, grammarDetail);
248881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
248981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
249065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::getGuessesForWord(const String& word, const String& context, Vector<String>& guesses)
249165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
249265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    TextChecker::getGuessesForWord(spellDocumentTag(), word, context, guesses);
249365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
249465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
249565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::learnWord(const String& word)
249665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
249765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(m_pendingLearnOrIgnoreWordMessageCount);
249865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    --m_pendingLearnOrIgnoreWordMessageCount;
249965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
25002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    TextChecker::learnWord(spellDocumentTag(), word);
250165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
250265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
250365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::ignoreWord(const String& word)
250465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
250565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(m_pendingLearnOrIgnoreWordMessageCount);
250665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    --m_pendingLearnOrIgnoreWordMessageCount;
250765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
250865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    TextChecker::ignoreWord(spellDocumentTag(), word);
250965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
251065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
251165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch// Other
251265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
25132bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebPageProxy::setFocus(bool focused)
25142bde8e466a4451c7319e3a072d118917957d6554Steve Block{
25152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (focused)
25162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_uiClient.focus(this);
25172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    else
25182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_uiClient.unfocus(this);
25192bde8e466a4451c7319e3a072d118917957d6554Steve Block}
25202bde8e466a4451c7319e3a072d118917957d6554Steve Block
25212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::takeFocus(uint32_t direction)
252265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
25232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_uiClient.takeFocus(this, (static_cast<FocusDirection>(direction) == FocusDirectionForward) ? kWKFocusDirectionForward : kWKFocusDirectionBackward);
252465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
252565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
252665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setToolTip(const String& toolTip)
252765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
252865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    String oldToolTip = m_toolTip;
252965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_toolTip = toolTip;
253065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->toolTipChanged(oldToolTip, m_toolTip);
253165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
253265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
253365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::setCursor(const WebCore::Cursor& cursor)
253465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
253565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->setCursor(cursor);
253665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
253765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
253865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didReceiveEvent(uint32_t opaqueType, bool handled)
253965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
254065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebEvent::Type type = static_cast<WebEvent::Type>(opaqueType);
254165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
254265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    switch (type) {
25432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    case WebEvent::NoType:
254465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::MouseMove:
254565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        break;
254665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
254765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::MouseDown:
254865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::MouseUp:
254965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::Wheel:
255065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::KeyDown:
255165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::KeyUp:
255265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::RawKeyDown:
255365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::Char:
25542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(GESTURE_EVENTS)
25552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    case WebEvent::GestureScrollBegin:
25562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    case WebEvent::GestureScrollEnd:
25572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
255865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        process()->responsivenessTimer()->stop();
255965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        break;
256065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
256165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
256265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    switch (type) {
25632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    case WebEvent::NoType:
25642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        break;
256565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::MouseMove:
256665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_processingMouseMoveEvent = false;
256765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        if (m_nextMouseMoveEvent) {
256865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            handleMouseEvent(*m_nextMouseMoveEvent);
256965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            m_nextMouseMoveEvent = nullptr;
257065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        }
257165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        break;
257265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::MouseDown:
25732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(GESTURE_EVENTS)
25742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    case WebEvent::GestureScrollBegin:
25752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    case WebEvent::GestureScrollEnd:
25762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif
257765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        break;
25782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    case WebEvent::MouseUp:
25792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_currentlyProcessedMouseDownEvent = nullptr;
25802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        break;
258165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
258265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::Wheel: {
258365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_processingWheelEvent = false;
258465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        if (m_nextWheelEvent) {
258565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            handleWheelEvent(*m_nextWheelEvent);
258665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            m_nextWheelEvent = nullptr;
258765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        }
258865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        break;
258965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
259065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
259165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::KeyDown:
259265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::KeyUp:
259365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::RawKeyDown:
259465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    case WebEvent::Char: {
259565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        NativeWebKeyboardEvent event = m_keyEventQueue.first();
259665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        MESSAGE_CHECK(type == event.type());
259765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
259865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_keyEventQueue.removeFirst();
259965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
26002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        m_pageClient->doneWithKeyEvent(event, handled);
26012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
260265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        if (handled)
260365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            break;
260465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
26052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        if (m_uiClient.implementsDidNotHandleKeyEvent())
26062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            m_uiClient.didNotHandleKeyEvent(this, event);
26072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(WIN)
26082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        else
26092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch            ::TranslateMessage(event.nativeEvent());
26102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
261165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        break;
261265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
261365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
261465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
261565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
26162fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::voidCallback(uint64_t callbackID)
26172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
26182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<VoidCallback> callback = m_voidCallbacks.take(callbackID);
26192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!callback) {
26202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        // FIXME: Log error or assert.
26212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
26222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
26232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
26242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    callback->performCallback();
26252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
26262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
262765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::dataCallback(const CoreIPC::DataReference& dataReference, uint64_t callbackID)
262865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
262965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<DataCallback> callback = m_dataCallbacks.take(callbackID);
263065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!callback) {
263165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        // FIXME: Log error or assert.
263265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
263365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
263465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
263565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    callback->performCallbackWithReturnValue(WebData::create(dataReference.data(), dataReference.size()).get());
263665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
263765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
263865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::stringCallback(const String& resultString, uint64_t callbackID)
263965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
264065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<StringCallback> callback = m_stringCallbacks.take(callbackID);
264165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!callback) {
264265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        // FIXME: Log error or assert.
26432bde8e466a4451c7319e3a072d118917957d6554Steve Block        // this can validly happen if a load invalidated the callback, though
264465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
264565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
264665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
26472bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_loadDependentStringCallbackIDs.remove(callbackID);
26482bde8e466a4451c7319e3a072d118917957d6554Steve Block
264965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    callback->performCallbackWithReturnValue(resultString.impl());
265065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
265165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
265281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::scriptValueCallback(const CoreIPC::DataReference& dataReference, uint64_t callbackID)
265381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
265481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<ScriptValueCallback> callback = m_scriptValueCallbacks.take(callbackID);
265581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!callback) {
265681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        // FIXME: Log error or assert.
265781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
265881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
265981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
266081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    Vector<uint8_t> data;
266181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    data.reserveInitialCapacity(dataReference.size());
266281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    data.append(dataReference.data(), dataReference.size());
266381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
266481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    callback->performCallbackWithReturnValue(data.size() ? WebSerializedScriptValue::adopt(data).get() : 0);
266581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
266681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
26672fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::computedPagesCallback(const Vector<WebCore::IntRect>& pageRects, double totalScaleFactorForPrinting, uint64_t callbackID)
26682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
26692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<ComputedPagesCallback> callback = m_computedPagesCallbacks.take(callbackID);
26702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!callback) {
26712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        // FIXME: Log error or assert.
26722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
26732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
26742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
26752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    callback->performCallbackWithReturnValue(pageRects, totalScaleFactorForPrinting);
26762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
26772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
267881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::validateCommandCallback(const String& commandName, bool isEnabled, int state, uint64_t callbackID)
267981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
268081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<ValidateCommandCallback> callback = m_validateCommandCallbacks.take(callbackID);
268181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!callback) {
268281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        // FIXME: Log error or assert.
268381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
268481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
268581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
268681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    callback->performCallbackWithReturnValue(commandName.impl(), isEnabled, state);
268781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
268881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
268965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::focusedFrameChanged(uint64_t frameID)
269065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
269165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!frameID) {
269265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_focusedFrame = 0;
269365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
269465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
269565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
269665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
269765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
269865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
269965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_focusedFrame = frame;
270065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
270165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
270265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::frameSetLargestFrameChanged(uint64_t frameID)
270365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
270465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!frameID) {
270565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_frameSetLargestFrame = 0;
270665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
270765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
270865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
270965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
271065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
271165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
271265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_frameSetLargestFrame = frame;
271365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
271465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
271565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::processDidBecomeUnresponsive()
271665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
271765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.processDidBecomeUnresponsive(this);
271865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
271965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
272065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::processDidBecomeResponsive()
272165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
272265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.processDidBecomeResponsive(this);
272365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
272465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
272565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::processDidCrash()
272665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
272765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(m_pageClient);
272865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
272965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_isValid = false;
273065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
27312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_mainFrame = nullptr;
273265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_drawingArea = nullptr;
273365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
273465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(INSPECTOR)
273565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_inspector) {
273665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_inspector->invalidate();
27372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_inspector = nullptr;
273865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
273965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
274065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
27412bde8e466a4451c7319e3a072d118917957d6554Steve Block#if ENABLE(FULLSCREEN_API)
27422bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (m_fullScreenManager) {
27432bde8e466a4451c7319e3a072d118917957d6554Steve Block        m_fullScreenManager->invalidate();
27442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_fullScreenManager = nullptr;
27452bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
27462bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
27472bde8e466a4451c7319e3a072d118917957d6554Steve Block
274865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_openPanelResultListener) {
274965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_openPanelResultListener->invalidate();
27502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        m_openPanelResultListener = nullptr;
275165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
275265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
275365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_geolocationPermissionRequestManager.invalidateRequests();
275465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
275565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_toolTip = String();
275665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
27572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_mainFrameHasHorizontalScrollbar = false;
27582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_mainFrameHasVerticalScrollbar = false;
27592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
276081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_mainFrameIsPinnedToLeftSide = false;
276181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_mainFrameIsPinnedToRightSide = false;
276281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
27632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    invalidateCallbackMap(m_voidCallbacks);
276465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    invalidateCallbackMap(m_dataCallbacks);
276565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    invalidateCallbackMap(m_stringCallbacks);
27662bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_loadDependentStringCallbackIDs.clear();
276781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    invalidateCallbackMap(m_scriptValueCallbacks);
27682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    invalidateCallbackMap(m_computedPagesCallbacks);
276981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    invalidateCallbackMap(m_validateCommandCallbacks);
277065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
277165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    Vector<WebEditCommandProxy*> editCommandVector;
277265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    copyToVector(m_editCommandSet, editCommandVector);
277365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_editCommandSet.clear();
277465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    for (size_t i = 0, size = editCommandVector.size(); i < size; ++i)
277565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        editCommandVector[i]->invalidate();
277665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->clearAllEditCommands();
277765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
277865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_activePopupMenu = 0;
277965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
278065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_estimatedProgress = 0.0;
278165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
278265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pendingLearnOrIgnoreWordMessageCount = 0;
278365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
278465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pageClient->processDidCrash();
278565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.processDidCrash(this);
27862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
27872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // Can't expect DidReceiveEvent notifications from a crashed web process.
27882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_keyEventQueue.clear();
27892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_nextWheelEvent = nullptr;
27902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_nextMouseMoveEvent = nullptr;
27912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_currentlyProcessedMouseDownEvent = nullptr;
27922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
27932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(MAC) && !defined(BUILDING_ON_SNOW_LEOPARD)
27942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    dismissCorrectionPanel(ReasonForDismissingCorrectionPanelIgnored);
27952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    m_pageClient->dismissDictionaryLookupPanel();
27962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
279765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
279865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
279965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebPageCreationParameters WebPageProxy::creationParameters() const
280065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
280165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPageCreationParameters parameters;
280265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
280365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.viewSize = m_pageClient->viewSize();
280465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.isActive = m_pageClient->isViewWindowActive();
280565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.isFocused = m_pageClient->isViewFocused();
280665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.isVisible = m_pageClient->isViewVisible();
280765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.isInWindow = m_pageClient->isViewInWindow();
280881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    parameters.drawingAreaType = m_drawingArea->type();
280965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.store = m_pageGroup->preferences()->store();
281065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.pageGroupData = m_pageGroup->data();
281165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.drawsBackground = m_drawsBackground;
281265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.drawsTransparentBackground = m_drawsTransparentBackground;
281381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    parameters.areMemoryCacheClientCallsEnabled = m_areMemoryCacheClientCallsEnabled;
281465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.useFixedLayout = m_useFixedLayout;
281565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.fixedLayoutSize = m_fixedLayoutSize;
281665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.userAgent = userAgent();
281765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.sessionState = SessionState(m_backForwardList->entries(), m_backForwardList->currentIndex());
281865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.highestUsedBackForwardItemID = WebBackForwardListItem::highedUsedItemID();
281981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    parameters.canRunBeforeUnloadConfirmPanel = m_uiClient.canRunBeforeUnloadConfirmPanel();
2820ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    parameters.canRunModal = m_uiClient.canRunModal();
28212bde8e466a4451c7319e3a072d118917957d6554Steve Block    parameters.userSpaceScaleFactor = m_pageClient->userSpaceScaleFactor();
282265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
282365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC)
282465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.isSmartInsertDeleteEnabled = m_isSmartInsertDeleteEnabled;
282565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
282665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
282765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(WIN)
282865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.nativeWindow = m_pageClient->nativeWindow();
282965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
283065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
283165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return parameters;
283265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
283365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
283465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if USE(ACCELERATED_COMPOSITING)
28352fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::enterAcceleratedCompositingMode(const LayerTreeContext& layerTreeContext)
28362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
28372fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_pageClient->enterAcceleratedCompositingMode(layerTreeContext);
28382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
28392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
28402fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::exitAcceleratedCompositingMode()
28412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
28422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_pageClient->exitAcceleratedCompositingMode();
28432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
284465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif // USE(ACCELERATED_COMPOSITING)
284565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
284665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::backForwardClear()
284765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
284865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_backForwardList->clear();
284965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
285065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
285165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::canAuthenticateAgainstProtectionSpaceInFrame(uint64_t frameID, const WebCore::ProtectionSpace& coreProtectionSpace, bool& canAuthenticate)
285265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
285365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
285465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
285565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
285665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebProtectionSpace> protectionSpace = WebProtectionSpace::create(coreProtectionSpace);
285765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
285865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    canAuthenticate = m_loaderClient.canAuthenticateAgainstProtectionSpaceInFrame(this, frame, protectionSpace.get());
285965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
286065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
286165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::didReceiveAuthenticationChallenge(uint64_t frameID, const WebCore::AuthenticationChallenge& coreChallenge, uint64_t challengeID)
286265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
286365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
286465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
286565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
28662bde8e466a4451c7319e3a072d118917957d6554Steve Block    RefPtr<AuthenticationChallengeProxy> authenticationChallenge = AuthenticationChallengeProxy::create(coreChallenge, challengeID, process());
286765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
286865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_loaderClient.didReceiveAuthenticationChallengeInFrame(this, frame, authenticationChallenge.get());
286965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
287065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
287165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::exceededDatabaseQuota(uint64_t frameID, const String& originIdentifier, const String& databaseName, const String& displayName, uint64_t currentQuota, uint64_t currentUsage, uint64_t expectedUsage, uint64_t& newQuota)
287265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
287365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
287465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
287565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
287665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebSecurityOrigin> origin = WebSecurityOrigin::create(originIdentifier);
287765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
287865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    newQuota = m_uiClient.exceededDatabaseQuota(this, frame, origin.get(), databaseName, displayName, currentQuota, currentUsage, expectedUsage);
287965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
288065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
288165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::requestGeolocationPermissionForFrame(uint64_t geolocationID, uint64_t frameID, String originIdentifier)
288265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
288365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrameProxy* frame = process()->webFrame(frameID);
288465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    MESSAGE_CHECK(frame);
288565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
288665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebSecurityOrigin> origin = WebSecurityOrigin::create(originIdentifier);
288765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<GeolocationPermissionRequestProxy> request = m_geolocationPermissionRequestManager.createRequest(geolocationID);
288865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
288965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_uiClient.decidePolicyForGeolocationPermissionRequest(this, frame, origin.get(), request.get()))
289065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        request->deny();
289165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
289265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2893ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochfloat WebPageProxy::headerHeight(WebFrameProxy* frame)
2894ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{
2895ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    return m_uiClient.headerHeight(this, frame);
2896ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}
2897ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
2898ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochfloat WebPageProxy::footerHeight(WebFrameProxy* frame)
2899ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{
2900ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    return m_uiClient.footerHeight(this, frame);
2901ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}
2902ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
29032fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::drawHeader(WebFrameProxy* frame, const FloatRect& rect)
2904ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{
2905ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    m_uiClient.drawHeader(this, frame, rect);
2906ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}
2907ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
29082fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::drawFooter(WebFrameProxy* frame, const FloatRect& rect)
2909ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{
2910ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    m_uiClient.drawFooter(this, frame, rect);
2911ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch}
2912ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch
29132fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::didCompleteRubberBandForMainFrame(const IntSize& initialOverhang)
29142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
29152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_uiClient.didCompleteRubberBandForMainFrame(this, initialOverhang);
29162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
29172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
29182fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebPageProxy::didChangeScrollbarsForMainFrame(bool hasHorizontalScrollbar, bool hasVerticalScrollbar)
29192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
29202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_mainFrameHasHorizontalScrollbar = hasHorizontalScrollbar;
29212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_mainFrameHasVerticalScrollbar = hasVerticalScrollbar;
29222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
29232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_pageClient->didChangeScrollbarsForMainFrame();
29242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
29252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
292681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::didChangeScrollOffsetPinningForMainFrame(bool pinnedToLeftSide, bool pinnedToRightSide)
292781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
292881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_mainFrameIsPinnedToLeftSide = pinnedToLeftSide;
292981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_mainFrameIsPinnedToRightSide = pinnedToRightSide;
293081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
293181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
293281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::didFinishLoadingDataForCustomRepresentation(const String& suggestedFilename, const CoreIPC::DataReference& dataReference)
293365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
293481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_pageClient->didFinishLoadingDataForCustomRepresentation(suggestedFilename, dataReference);
293565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
293665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
293765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::backForwardRemovedItem(uint64_t itemID)
293865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
293965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    process()->send(Messages::WebPage::DidRemoveBackForwardItem(itemID), m_pageID);
294065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
294165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
294265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::beginPrinting(WebFrameProxy* frame, const PrintInfo& printInfo)
294365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
294465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_isInPrintingMode)
294565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
294665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
294765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_isInPrintingMode = true;
29482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::BeginPrinting(frame->frameID(), printInfo), m_pageID, m_isPerformingDOMPrintOperation ? CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply : 0);
294965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
295065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
295165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebPageProxy::endPrinting()
295265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
295365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_isInPrintingMode)
295465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
295565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
295665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_isInPrintingMode = false;
29572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::EndPrinting(), m_pageID, m_isPerformingDOMPrintOperation ? CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply : 0);
295865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
295965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
29602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::computePagesForPrinting(WebFrameProxy* frame, const PrintInfo& printInfo, PassRefPtr<ComputedPagesCallback> prpCallback)
296165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
29622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    RefPtr<ComputedPagesCallback> callback = prpCallback;
29632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!isValid()) {
29642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        callback->invalidate();
29652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
29662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
29672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
29682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    uint64_t callbackID = callback->callbackID();
29692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_computedPagesCallbacks.set(callbackID, callback.get());
29702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_isInPrintingMode = true;
29712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::ComputePagesForPrinting(frame->frameID(), printInfo, callbackID), m_pageID, m_isPerformingDOMPrintOperation ? CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply : 0);
297265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
297365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
297481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if PLATFORM(MAC) || PLATFORM(WIN)
29752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::drawRectToPDF(WebFrameProxy* frame, const IntRect& rect, PassRefPtr<DataCallback> prpCallback)
297665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
29772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    RefPtr<DataCallback> callback = prpCallback;
29782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!isValid()) {
29792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        callback->invalidate();
29802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
29812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
29822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
29832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    uint64_t callbackID = callback->callbackID();
29842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_dataCallbacks.set(callbackID, callback.get());
29852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::DrawRectToPDF(frame->frameID(), rect, callbackID), m_pageID, m_isPerformingDOMPrintOperation ? CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply : 0);
29862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block}
29872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
29882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::drawPagesToPDF(WebFrameProxy* frame, uint32_t first, uint32_t count, PassRefPtr<DataCallback> prpCallback)
29892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{
29902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    RefPtr<DataCallback> callback = prpCallback;
29912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!isValid()) {
29922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        callback->invalidate();
29932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        return;
29942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    }
29952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
29962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    uint64_t callbackID = callback->callbackID();
29972fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_dataCallbacks.set(callbackID, callback.get());
29982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    process()->send(Messages::WebPage::DrawPagesToPDF(frame->frameID(), first, count, callbackID), m_pageID, m_isPerformingDOMPrintOperation ? CoreIPC::DispatchMessageEvenWhenWaitingForSyncReply : 0);
299965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
300065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
300165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
300281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebPageProxy::flashBackingStoreUpdates(const Vector<IntRect>& updateRects)
300381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
300481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    m_pageClient->flashBackingStoreUpdates(updateRects);
300581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
300681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
300781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochColor WebPageProxy::viewUpdatesFlashColor()
300881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
300981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return Color(0, 200, 255);
301081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
301181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
301281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen MurdochColor WebPageProxy::backingStoreUpdatesFlashColor()
301381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
301481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return Color(200, 0, 255);
301581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
301681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
30172bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebPageProxy::saveDataToFileInDownloadsFolder(const String& suggestedFilename, const String& mimeType, const String& originatingURLString, WebData* data)
30182bde8e466a4451c7319e3a072d118917957d6554Steve Block{
30192bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_uiClient.saveDataToFileInDownloadsFolder(this, suggestedFilename, mimeType, originatingURLString, data);
30202bde8e466a4451c7319e3a072d118917957d6554Steve Block}
30212bde8e466a4451c7319e3a072d118917957d6554Steve Block
30222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::linkClicked(const String& url, const WebMouseEvent& event)
30232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
30242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    process()->send(Messages::WebPage::LinkClicked(url, event), m_pageID, 0);
30252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
30262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
30272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if PLATFORM(MAC)
30282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
30292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebPageProxy::substitutionsPanelIsShowing(bool& isShowing)
30302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{
30312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    isShowing = TextChecker::substitutionsPanelIsShowing();
30322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
30332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
30342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if !defined(BUILDING_ON_SNOW_LEOPARD)
30352bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebPageProxy::showCorrectionPanel(int32_t panelType, const WebCore::FloatRect& boundingBoxOfReplacedString, const String& replacedString, const String& replacementString, const Vector<String>& alternativeReplacementStrings)
30362bde8e466a4451c7319e3a072d118917957d6554Steve Block{
30372bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_pageClient->showCorrectionPanel((WebCore::CorrectionPanelInfo::PanelType)panelType, boundingBoxOfReplacedString, replacedString, replacementString, alternativeReplacementStrings);
30382bde8e466a4451c7319e3a072d118917957d6554Steve Block}
30392bde8e466a4451c7319e3a072d118917957d6554Steve Block
30402bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebPageProxy::dismissCorrectionPanel(int32_t reason)
30412bde8e466a4451c7319e3a072d118917957d6554Steve Block{
30422bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_pageClient->dismissCorrectionPanel((WebCore::ReasonForDismissingCorrectionPanel)reason);
30432bde8e466a4451c7319e3a072d118917957d6554Steve Block}
30442bde8e466a4451c7319e3a072d118917957d6554Steve Block
30452bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebPageProxy::dismissCorrectionPanelSoon(int32_t reason, String& result)
30462bde8e466a4451c7319e3a072d118917957d6554Steve Block{
30472bde8e466a4451c7319e3a072d118917957d6554Steve Block    result = m_pageClient->dismissCorrectionPanelSoon((WebCore::ReasonForDismissingCorrectionPanel)reason);
30482bde8e466a4451c7319e3a072d118917957d6554Steve Block}
30492bde8e466a4451c7319e3a072d118917957d6554Steve Block
30502bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebPageProxy::recordAutocorrectionResponse(int32_t responseType, const String& replacedString, const String& replacementString)
30512bde8e466a4451c7319e3a072d118917957d6554Steve Block{
30522bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_pageClient->recordAutocorrectionResponse((WebCore::EditorClient::AutocorrectionResponseType)responseType, replacedString, replacementString);
30532bde8e466a4451c7319e3a072d118917957d6554Steve Block}
30542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif // !defined(BUILDING_ON_SNOW_LEOPARD)
30552bde8e466a4451c7319e3a072d118917957d6554Steve Block
30562bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid WebPageProxy::handleCorrectionPanelResult(const String& result)
30572bde8e466a4451c7319e3a072d118917957d6554Steve Block{
30582bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !defined(BUILDING_ON_SNOW_LEOPARD)
30592bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (!isClosed())
30602bde8e466a4451c7319e3a072d118917957d6554Steve Block        process()->send(Messages::WebPage::HandleCorrectionPanelResult(result), m_pageID, 0);
30612bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
30622bde8e466a4451c7319e3a072d118917957d6554Steve Block}
30632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif // PLATFORM(MAC)
30642bde8e466a4451c7319e3a072d118917957d6554Steve Block
306565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit
3066