165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch/*
22bde8e466a4451c7319e3a072d118917957d6554Steve Block * 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 "WebFrameLoaderClient.h"
2865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "AuthenticationManager.h"
3065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "DataReference.h"
312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "InjectedBundleNavigationAction.h"
3265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "InjectedBundleUserMessageCoders.h"
3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PlatformCertificateInfo.h"
3465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PluginView.h"
3565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "StringPairVector.h"
3681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include "WebBackForwardListProxy.h"
3765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebContextMessages.h"
3865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebCoreArgumentCoders.h"
3965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebErrors.h"
4065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebEvent.h"
4165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebFrame.h"
4265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebFrameNetworkingContext.h"
4365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebNavigationDataStore.h"
4465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPage.h"
4565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebPageProxyMessages.h"
4665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcess.h"
4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "WebProcessProxyMessages.h"
4865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <JavaScriptCore/APICast.h>
4965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <JavaScriptCore/JSObject.h>
5065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Chrome.h>
5165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/DOMWrapperWorld.h>
5265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/DocumentLoader.h>
5365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/FormState.h>
5465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Frame.h>
5565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/FrameLoadRequest.h>
5665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/FrameView.h>
5765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/HTMLAppletElement.h>
5865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/HTMLFormElement.h>
592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include <WebCore/HistoryItem.h>
6065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/MIMETypeRegistry.h>
6165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/MouseEvent.h>
6281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#include <WebCore/NotImplemented.h>
6365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Page.h>
6465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/PluginData.h>
6565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/ProgressTracker.h>
6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/ResourceError.h>
6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/UIEventWithKeyState.h>
6865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/Widget.h>
6965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include <WebCore/WindowFeatures.h>
7065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochusing namespace WebCore;
7265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochnamespace WebKit {
7465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
7565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebFrameLoaderClient::WebFrameLoaderClient(WebFrame* frame)
7665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    : m_frame(frame)
7765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_hasSentResponseToPluginView(false)
7865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    , m_frameHasCustomRepresentation(false)
7965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
8065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
8165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochWebFrameLoaderClient::~WebFrameLoaderClient()
8365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
8465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
8565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
8665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::frameLoaderDestroyed()
8765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
8865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_frame->invalidate();
8965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Balances explicit ref() in WebFrame::createMainFrame and WebFrame::createSubframe.
9165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_frame->deref();
9265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
9365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameLoaderClient::hasHTMLView() const
9565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
9665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return !m_frameHasCustomRepresentation;
9765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
9865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameLoaderClient::hasWebView() const
10065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
10165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_frame->page();
10265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
10365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::makeRepresentation(DocumentLoader*)
10565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
10665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
10765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
10865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::forceLayout()
11065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
11165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
11265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
11365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::forceLayoutForNonHTML()
11565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
11665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
11765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
11865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
11965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::setCopiesOnScroll()
12065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
12165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
12265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
12365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::detachedFromParent2()
12565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
12665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
12765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
12865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
12965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
13065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
13165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
13265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
13365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didRemoveFrameFromHierarchy(webPage, m_frame, userData);
13465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
13565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
13665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidRemoveFrameFromHierarchy(m_frame->frameID(), InjectedBundleUserMessageEncoder(userData.get())));
13765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
13865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
13965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
14065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::detachedFromParent3()
14165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
14265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
14365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
14465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1452fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebFrameLoaderClient::assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader* loader, const ResourceRequest& request)
14665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
14765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
14865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
14965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
15065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool pageIsProvisionallyLoading = false;
1522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (FrameLoader* frameLoader = loader->frameLoader())
1532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        pageIsProvisionallyLoading = frameLoader->provisionalDocumentLoader() == loader;
1542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
1552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    webPage->injectedBundleResourceLoadClient().didInitiateLoadForResource(webPage, m_frame, identifier, request, pageIsProvisionallyLoading);
1562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    webPage->send(Messages::WebPageProxy::DidInitiateLoadForResource(m_frame->frameID(), identifier, request, pageIsProvisionallyLoading));
15765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
15865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
15965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchWillSendRequest(DocumentLoader*, unsigned long identifier, ResourceRequest& request, const ResourceResponse& redirectResponse)
16065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
16165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
16265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
16365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
16465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
1652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    webPage->injectedBundleResourceLoadClient().willSendRequestForFrame(webPage, m_frame, identifier, request, redirectResponse);
1662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
1672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (request.isNull()) {
16865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        // FIXME: We should probably send a message saying we cancelled the request for the resource.
16965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
17065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
17165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidSendRequestForResource(m_frame->frameID(), identifier, request, redirectResponse));
17365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
17465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
17565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameLoaderClient::shouldUseCredentialStorage(DocumentLoader*, unsigned long identifier)
17665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
17765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return true;
17865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
17965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge& challenge)
18165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
18265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: Authentication is a per-resource concept, but we don't do per-resource handling in the UIProcess at the API level quite yet.
18365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Once we do, we might need to make sure authentication fits with our solution.
18465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
18665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
18765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
18865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
18965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    AuthenticationManager::shared().didReceiveAuthenticationChallenge(m_frame, challenge);
19065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
19165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long identifier, const AuthenticationChallenge&)
19365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
19465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
19565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
19665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
19765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if USE(PROTECTION_SPACE_AUTH_CALLBACK)
19865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameLoaderClient::canAuthenticateAgainstProtectionSpace(DocumentLoader*, unsigned long, const ProtectionSpace& protectionSpace)
19965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
20065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: Authentication is a per-resource concept, but we don't do per-resource handling in the UIProcess at the API level quite yet.
20165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Once we do, we might need to make sure authentication fits with our solution.
20265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
20365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
20465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
20565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return false;
20665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
20765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    bool canAuthenticate;
20865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage->sendSync(Messages::WebPageProxy::CanAuthenticateAgainstProtectionSpaceInFrame(m_frame->frameID(), protectionSpace), Messages::WebPageProxy::CanAuthenticateAgainstProtectionSpaceInFrame::Reply(canAuthenticate)))
20965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return false;
21065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return canAuthenticate;
21265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
21365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
21465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
21565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidReceiveResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse& response)
21665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
21765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
21865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
21965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
22065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    webPage->injectedBundleResourceLoadClient().didReceiveResponseForResource(webPage, m_frame, identifier, response);
22265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidReceiveResponseForResource(m_frame->frameID(), identifier, response));
22365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
22465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebFrameLoaderClient::dispatchDidReceiveContentLength(DocumentLoader*, unsigned long identifier, int dataLength)
22665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
22765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
22865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
22965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
23065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    webPage->injectedBundleResourceLoadClient().didReceiveContentLengthForResource(webPage, m_frame, identifier, dataLength);
2322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    webPage->send(Messages::WebPageProxy::DidReceiveContentLengthForResource(m_frame->frameID(), identifier, dataLength));
23365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
23465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
23565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidFinishLoading(DocumentLoader*, unsigned long identifier)
23665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
23765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
23865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
23965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
24065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    webPage->injectedBundleResourceLoadClient().didFinishLoadForResource(webPage, m_frame, identifier);
24265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidFinishLoadForResource(m_frame->frameID(), identifier));
24365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
24465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
24565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidFailLoading(DocumentLoader*, unsigned long identifier, const ResourceError& error)
24665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
24765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
24865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
24965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
25065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
2512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    webPage->injectedBundleResourceLoadClient().didFailLoadForResource(webPage, m_frame, identifier, error);
25265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidFailLoadForResource(m_frame->frameID(), identifier, error));
25365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
25465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
25565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameLoaderClient::dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int length)
25665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
25765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
25865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return false;
25965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
26065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
26165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidLoadResourceByXMLHttpRequest(unsigned long identifier, const String&)
26265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
26365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
26465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
26565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
26665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidHandleOnloadEvents()
26765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
26865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
26965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
27065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
27165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
27265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
27365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didHandleOnloadEventsForFrame(webPage, m_frame);
27465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
27565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
27665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidReceiveServerRedirectForProvisionalLoad()
27765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
27865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
27965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
28065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
28165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
28265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    DocumentLoader* provisionalLoader = m_frame->coreFrame()->loader()->provisionalDocumentLoader();
28365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    const String& url = provisionalLoader->url().string();
28465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
28565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
28665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
28765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didReceiveServerRedirectForProvisionalLoadForFrame(webPage, m_frame, userData);
28865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
28965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
29065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidReceiveServerRedirectForProvisionalLoadForFrame(m_frame->frameID(), url, InjectedBundleUserMessageEncoder(userData.get())));
29165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
29265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
29365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidCancelClientRedirect()
29465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
29565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
29665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
29765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
29865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
29965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
30065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didCancelClientRedirectForFrame(webPage, m_frame);
30165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
30265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
30365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchWillPerformClientRedirect(const KURL& url, double interval, double fireDate)
30465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
30565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
30665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
30765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
30865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
30965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
31065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().willPerformClientRedirectForFrame(webPage, m_frame, url.string(), interval, fireDate);
31165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
31265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
31365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidChangeLocationWithinPage()
31465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
31565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
31665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
31765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
31865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
31965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
32065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
32165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
32265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didSameDocumentNavigationForFrame(webPage, m_frame, SameDocumentNavigationAnchorNavigation, userData);
32365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
32465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
3252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationAnchorNavigation, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get())));
32665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
32765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
32865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidPushStateWithinPage()
32965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
33065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
33165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
33265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
33365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
33465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
33565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
33665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
33765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didSameDocumentNavigationForFrame(webPage, m_frame, SameDocumentNavigationSessionStatePush, userData);
33865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
33965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
3402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationSessionStatePush, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get())));
34165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
34265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
34365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidReplaceStateWithinPage()
34465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
34565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
34665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
34765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
34865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
34965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
35065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
35165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
35265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didSameDocumentNavigationForFrame(webPage, m_frame, SameDocumentNavigationSessionStateReplace, userData);
35365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
35465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
3552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationSessionStateReplace, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get())));
35665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
35765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
35865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidPopStateWithinPage()
35965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
36065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
36165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
36265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
36365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
36465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
36565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
36665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
36765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didSameDocumentNavigationForFrame(webPage, m_frame, SameDocumentNavigationSessionStatePop, userData);
36865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
36965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
3702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    webPage->send(Messages::WebPageProxy::DidSameDocumentNavigationForFrame(m_frame->frameID(), SameDocumentNavigationSessionStatePop, m_frame->coreFrame()->document()->url().string(), InjectedBundleUserMessageEncoder(userData.get())));
37165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
37265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
37365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchWillClose()
37465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
37565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
37665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
37765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
37865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidReceiveIcon()
37965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
38065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
38165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
38265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
38365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidStartProvisionalLoad()
38465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
38565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
38665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
38765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
3882bde8e466a4451c7319e3a072d118917957d6554Steve Block
38965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->findController().hideFindUI();
3902bde8e466a4451c7319e3a072d118917957d6554Steve Block    webPage->sandboxExtensionTracker().didStartProvisionalLoad(m_frame);
3912bde8e466a4451c7319e3a072d118917957d6554Steve Block
39265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    DocumentLoader* provisionalLoader = m_frame->coreFrame()->loader()->provisionalDocumentLoader();
39365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    const String& url = provisionalLoader->url().string();
39465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
39565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
39665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
39765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didStartProvisionalLoadForFrame(webPage, m_frame, userData);
39865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
3992bde8e466a4451c7319e3a072d118917957d6554Steve Block    String unreachableURL = provisionalLoader->unreachableURL().string();
40065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
40165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
4022bde8e466a4451c7319e3a072d118917957d6554Steve Block    webPage->send(Messages::WebPageProxy::DidStartProvisionalLoadForFrame(m_frame->frameID(), url, unreachableURL, InjectedBundleUserMessageEncoder(userData.get())));
40365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
40465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
4052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebFrameLoaderClient::dispatchDidReceiveTitle(const StringWithDirection& title)
40665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
40765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
40865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
40965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
41065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
41165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
41265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
41365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
4142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // FIXME: use direction of title.
4152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    webPage->injectedBundleLoaderClient().didReceiveTitleForFrame(webPage, title.string(), m_frame, userData);
41665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
41765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
4182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    webPage->send(Messages::WebPageProxy::DidReceiveTitleForFrame(m_frame->frameID(), title.string(), InjectedBundleUserMessageEncoder(userData.get())));
41965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
42065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
42165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidChangeIcons()
42265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
42365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
42465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
42565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
42665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidCommitLoad()
42765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
42865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
42965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
43065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
43165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
43265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    const ResourceResponse& response = m_frame->coreFrame()->loader()->documentLoader()->response();
43365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
43465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
43565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
43665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didCommitLoadForFrame(webPage, m_frame, userData);
43765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
43865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->sandboxExtensionTracker().didCommitProvisionalLoad(m_frame);
43965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
44065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
4412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
44265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidCommitLoadForFrame(m_frame->frameID(), response.mimeType(), m_frameHasCustomRepresentation, PlatformCertificateInfo(response), InjectedBundleUserMessageEncoder(userData.get())));
4432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
4442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // Only restore the scale factor for standard frame loads (of the main frame).
4452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (m_frame->isMainFrame() && m_frame->coreFrame()->loader()->loadType() == FrameLoadTypeStandard) {
4462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        if (m_frame->coreFrame()->pageScaleFactor() != 1)
4472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block            webPage->scaleWebView(1, IntPoint());
4482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    }
44965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
45065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
45165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidFailProvisionalLoad(const ResourceError& error)
45265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
45365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
45465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
45565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
45665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
45765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
45865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
45965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
46065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didFailProvisionalLoadWithErrorForFrame(webPage, m_frame, error, userData);
46165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
46265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->sandboxExtensionTracker().didFailProvisionalLoad(m_frame);
46365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
46465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
46565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidFailProvisionalLoadForFrame(m_frame->frameID(), error, InjectedBundleUserMessageEncoder(userData.get())));
46665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
46765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // If we have a load listener, notify it.
46865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (WebFrame::LoadListener* loadListener = m_frame->loadListener())
46965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        loadListener->didFailLoad(m_frame, error.isCancellation());
47065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
47165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
47265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidFailLoad(const ResourceError& error)
47365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
47465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
47565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
47665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
47765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
47865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
47965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
48065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
48165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didFailLoadWithErrorForFrame(webPage, m_frame, error, userData);
48265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
48365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
48465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidFailLoadForFrame(m_frame->frameID(), error, InjectedBundleUserMessageEncoder(userData.get())));
48565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
48665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // If we have a load listener, notify it.
48765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (WebFrame::LoadListener* loadListener = m_frame->loadListener())
48865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        loadListener->didFailLoad(m_frame, error.isCancellation());
48965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
49065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
49165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidFinishDocumentLoad()
49265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
49365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
49465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
49565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
49665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
49765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
49865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
49965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
50065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didFinishDocumentLoadForFrame(webPage, m_frame, userData);
50165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
50265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
50365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidFinishDocumentLoadForFrame(m_frame->frameID(), InjectedBundleUserMessageEncoder(userData.get())));
50465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
50565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
50665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidFinishLoad()
50765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
50865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
50965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
51065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
51165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
51265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
51365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
51465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
51565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didFinishLoadForFrame(webPage, m_frame, userData);
51665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
51765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
51865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidFinishLoadForFrame(m_frame->frameID(), InjectedBundleUserMessageEncoder(userData.get())));
51965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
52065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // If we have a load listener, notify it.
52165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (WebFrame::LoadListener* loadListener = m_frame->loadListener())
52265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        loadListener->didFinishLoad(m_frame);
52365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
52465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
52565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidFirstLayout()
52665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
52765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
52865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
52965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
53065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
53165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
53265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
53365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
53465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didFirstLayoutForFrame(webPage, m_frame, userData);
53565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
53665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
53765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidFirstLayoutForFrame(m_frame->frameID(), InjectedBundleUserMessageEncoder(userData.get())));
53865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
53965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
54065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout()
54165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
54265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
54365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
54465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
54565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
54665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
54765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
54865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the bundle client.
54965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didFirstVisuallyNonEmptyLayoutForFrame(webPage, m_frame, userData);
55065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
55165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Notify the UIProcess.
55265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidFirstVisuallyNonEmptyLayoutForFrame(m_frame->frameID(), InjectedBundleUserMessageEncoder(userData.get())));
55365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
55465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
55565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochFrame* WebFrameLoaderClient::dispatchCreatePage(const NavigationAction& navigationAction)
55665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
55765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
55865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
55965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return 0;
56065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
56165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Just call through to the chrome client.
56265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    Page* newPage = webPage->corePage()->chrome()->createWindow(m_frame->coreFrame(), FrameLoadRequest(m_frame->coreFrame()->document()->securityOrigin()), WindowFeatures(), navigationAction);
56365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!newPage)
56465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return 0;
56565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
56665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return newPage->mainFrame();
56765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
56865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
56965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchShow()
57065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
57165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
57265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
57365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
57465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
57565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->show();
57665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
57765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
57881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebFrameLoaderClient::dispatchDecidePolicyForResponse(FramePolicyFunction function, const ResourceResponse& response, const ResourceRequest& request)
57965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
58065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
58165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
58265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
58365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (!request.url().string())
5852fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
5862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
5872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<APIObject> userData;
5882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
5892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // Notify the bundle client.
59081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WKBundlePagePolicyAction policy = webPage->injectedBundlePolicyClient().decidePolicyForResponse(webPage, m_frame, response, request, userData);
59181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (policy == WKBundlePagePolicyActionUse) {
59281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        (m_frame->coreFrame()->loader()->policyChecker()->*function)(PolicyUse);
59381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
59481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
59565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
5962fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    uint64_t listenerID = m_frame->setUpPolicyListener(function);
59765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    bool receivedPolicyAction;
59865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t policyAction;
59965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t downloadID;
6002fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
6012fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // Notify the UIProcess.
60281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForResponse(m_frame->frameID(), response, request, listenerID, InjectedBundleUserMessageEncoder(userData.get())), Messages::WebPageProxy::DecidePolicyForResponse::Reply(receivedPolicyAction, policyAction, downloadID)))
60365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
60465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
60565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // We call this synchronously because CFNetwork can only convert a loading connection to a download from its didReceiveResponse callback.
60665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (receivedPolicyAction)
60765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), downloadID);
60865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
60965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6102fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebFrameLoaderClient::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction function, const NavigationAction& navigationAction, const ResourceRequest& request, PassRefPtr<FormState> formState, const String& frameName)
61165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
61265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
61365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
61465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
61565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6162fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<APIObject> userData;
6172fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
6182fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<InjectedBundleNavigationAction> action = InjectedBundleNavigationAction::create(m_frame, navigationAction, formState);
6192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
6202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // Notify the bundle client.
62181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WKBundlePagePolicyAction policy = webPage->injectedBundlePolicyClient().decidePolicyForNewWindowAction(webPage, m_frame, action.get(), request, frameName, userData);
62281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (policy == WKBundlePagePolicyActionUse) {
62381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        (m_frame->coreFrame()->loader()->policyChecker()->*function)(PolicyUse);
62481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
62581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
62665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
62765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    uint64_t listenerID = m_frame->setUpPolicyListener(function);
62965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // Notify the UIProcess.
6312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    webPage->send(Messages::WebPageProxy::DecidePolicyForNewWindowAction(m_frame->frameID(), action->navigationType(), action->modifiers(), action->mouseButton(), request, frameName, listenerID, InjectedBundleUserMessageEncoder(userData.get())));
63265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
63365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6342fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebFrameLoaderClient::dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, const NavigationAction& navigationAction, const ResourceRequest& request, PassRefPtr<FormState> formState)
63565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
63665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
63765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
63865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
63965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
64081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // Always ignore requests with empty URLs.
64181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (request.isEmpty()) {
64281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        (m_frame->coreFrame()->loader()->policyChecker()->*function)(PolicyIgnore);
64381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
64481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
64581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
6462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<APIObject> userData;
6472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
6482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    RefPtr<InjectedBundleNavigationAction> action = InjectedBundleNavigationAction::create(m_frame, navigationAction, formState);
6492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block
6502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // Notify the bundle client.
65181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WKBundlePagePolicyAction policy = webPage->injectedBundlePolicyClient().decidePolicyForNavigationAction(webPage, m_frame, action.get(), request, userData);
65281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (policy == WKBundlePagePolicyActionUse) {
65381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        (m_frame->coreFrame()->loader()->policyChecker()->*function)(PolicyUse);
65481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
65581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
6562bde8e466a4451c7319e3a072d118917957d6554Steve Block
6572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    uint64_t listenerID = m_frame->setUpPolicyListener(function);
6582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool receivedPolicyAction;
6592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    uint64_t policyAction;
66081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    uint64_t downloadID;
66165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // Notify the UIProcess.
66381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!webPage->sendSync(Messages::WebPageProxy::DecidePolicyForNavigationAction(m_frame->frameID(), action->navigationType(), action->modifiers(), action->mouseButton(), request, listenerID, InjectedBundleUserMessageEncoder(userData.get())), Messages::WebPageProxy::DecidePolicyForNavigationAction::Reply(receivedPolicyAction, policyAction, downloadID)))
6642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block        return;
66565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
6662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // We call this synchronously because WebCore cannot gracefully handle a frame load without a synchronous navigation policy reply.
6672fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    if (receivedPolicyAction)
66881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        m_frame->didReceivePolicyDecision(listenerID, static_cast<PolicyAction>(policyAction), downloadID);
66965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
67065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
67165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::cancelPolicyCheck()
67265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
67365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_frame->invalidatePolicyListener();
67465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
67565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
67681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebFrameLoaderClient::dispatchUnableToImplementPolicy(const ResourceError& error)
67765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
67881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebPage* webPage = m_frame->page();
67981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!webPage)
68081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
68181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
68281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    RefPtr<APIObject> userData;
68381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
68481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // Notify the bundle client.
68581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    webPage->injectedBundlePolicyClient().unableToImplementPolicy(webPage, m_frame, error, userData);
68681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
68781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // Notify the UIProcess.
68881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    webPage->send(Messages::WebPageProxy::UnableToImplementPolicy(m_frame->frameID(), error, InjectedBundleUserMessageEncoder(userData.get())));
68965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
69065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
69165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchWillSubmitForm(FramePolicyFunction function, PassRefPtr<FormState> prpFormState)
69265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
69365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
69465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
69565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
69665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
69765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: Pass more of the form state.
69865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<FormState> formState = prpFormState;
69965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
70065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    HTMLFormElement* form = formState->form();
70165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrame* sourceFrame = static_cast<WebFrameLoaderClient*>(formState->sourceFrame()->loader()->client())->webFrame();
70265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    const Vector<std::pair<String, String> >& values = formState->textFieldValues();
70365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
70465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
70565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleFormClient().willSubmitForm(webPage, form, m_frame, sourceFrame, values, userData);
70665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
70765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
70865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    uint64_t listenerID = m_frame->setUpPolicyListener(function);
70965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    StringPairVector valuesVector(values);
71065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
71165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::WillSubmitForm(m_frame->frameID(), sourceFrame->frameID(), valuesVector, listenerID, InjectedBundleUserMessageEncoder(userData.get())));
71265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
71365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
71465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidLoadMainResource(DocumentLoader*)
71565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
71665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
71765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
71865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
71965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::revertToProvisionalState(DocumentLoader*)
72065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
72165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
72265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
72365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
72465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::setMainDocumentError(DocumentLoader*, const ResourceError& error)
72565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
72665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_pluginView)
72765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
72865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
72965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pluginView->manualLoadDidFail(error);
73065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pluginView = 0;
73165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_hasSentResponseToPluginView = false;
73265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
73365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
73465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::willChangeEstimatedProgress()
73565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
73665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
73765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
73865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
73965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::didChangeEstimatedProgress()
74065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
74165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
74265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
74365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
74465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::postProgressStartedNotification()
74565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
74665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (WebPage* webPage = m_frame->page())
74765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        webPage->send(Messages::WebPageProxy::DidStartProgress());
74865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
74965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
75065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::postProgressEstimateChangedNotification()
75165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
75265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (WebPage* webPage = m_frame->page()) {
75365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        double progress = webPage->corePage()->progress()->estimatedProgress();
75465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        webPage->send(Messages::WebPageProxy::DidChangeProgress(progress));
75565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
75665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
75765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
75865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
75965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::postProgressFinishedNotification()
76065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
76165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (WebPage* webPage = m_frame->page())
76265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        webPage->send(Messages::WebPageProxy::DidFinishProgress());
76365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
76465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
76565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::setMainFrameDocumentReady(bool)
76665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
76765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
76865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
76965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
77065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::startDownload(const ResourceRequest& request)
77165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
77265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_frame->startDownload(request);
77365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
77465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
77565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::willChangeTitle(DocumentLoader*)
77665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
77765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
77865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
77965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
78065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::didChangeTitle(DocumentLoader*)
78165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
78265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
78365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
78465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
78565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::committedLoad(DocumentLoader* loader, const char* data, int length)
78665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
78765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // If we're loading a custom representation, we don't want to hand off the data to WebCore.
78865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_frameHasCustomRepresentation)
78965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
79065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
79165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_pluginView)
79265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        loader->commitData(data, length);
79365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
79465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // If the document is a stand-alone media document, now is the right time to cancel the WebKit load.
79565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: This code should be shared across all ports. <http://webkit.org/b/48762>.
79665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_frame->coreFrame()->document()->isMediaDocument())
79765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        loader->cancelMainResourceLoad(pluginWillHandleLoadError(loader->response()));
79865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
79965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Calling commitData did not create the plug-in view.
80065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_pluginView)
80165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
80265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
80365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_hasSentResponseToPluginView) {
80465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_pluginView->manualLoadDidReceiveResponse(loader->response());
80565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        // manualLoadDidReceiveResponse sets up a new stream to the plug-in. on a full-page plug-in, a failure in
80665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        // setting up this stream can cause the main document load to be cancelled, setting m_pluginView
80765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        // to null
80865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        if (!m_pluginView)
80965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            return;
81065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_hasSentResponseToPluginView = true;
81165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
81265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pluginView->manualLoadDidReceiveData(data, length);
81365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
81465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
81565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::finishedLoading(DocumentLoader* loader)
81665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
81765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!m_pluginView) {
81865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        committedLoad(loader, 0, 0);
81965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
82065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        if (m_frameHasCustomRepresentation) {
82165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            WebPage* webPage = m_frame->page();
82265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            if (!webPage)
82365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch                return;
82465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
82565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            RefPtr<SharedBuffer> mainResourceData = loader->mainResourceData();
82665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            CoreIPC::DataReference dataReference(reinterpret_cast<const uint8_t*>(mainResourceData ? mainResourceData->data() : 0), mainResourceData ? mainResourceData->size() : 0);
82765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
82881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch            webPage->send(Messages::WebPageProxy::DidFinishLoadingDataForCustomRepresentation(loader->response().suggestedFilename(), dataReference));
82965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        }
83065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
83165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
83265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
83365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
83465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pluginView->manualLoadDidFinishLoading();
83565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pluginView = 0;
83665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_hasSentResponseToPluginView = false;
83765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
83865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
83965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::updateGlobalHistory()
84065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
84165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
8422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!webPage || !webPage->pageGroup()->isVisibleToHistoryClient())
84365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
84465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
84565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    DocumentLoader* loader = m_frame->coreFrame()->loader()->documentLoader();
84665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
84765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebNavigationDataStore data;
84865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    data.url = loader->urlForHistory().string();
8492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // FIXME: use direction of title.
8502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    data.title = loader->title().string();
85165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
85265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebProcess::shared().connection()->send(Messages::WebContext::DidNavigateWithNavigationData(webPage->pageID(), data, m_frame->frameID()), 0);
85365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
85465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
85565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::updateGlobalHistoryRedirectLinks()
85665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
85765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
8582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!webPage || !webPage->pageGroup()->isVisibleToHistoryClient())
85965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
86065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
86165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    DocumentLoader* loader = m_frame->coreFrame()->loader()->documentLoader();
86265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(loader->unreachableURL().isEmpty());
86365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
86465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Client redirect
86565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!loader->clientRedirectSourceForHistory().isNull()) {
86665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        WebProcess::shared().connection()->send(Messages::WebContext::DidPerformClientRedirect(webPage->pageID(),
86765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            loader->clientRedirectSourceForHistory(), loader->clientRedirectDestinationForHistory(), m_frame->frameID()), 0);
86865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
86965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
87065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // Server redirect
87165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!loader->serverRedirectSourceForHistory().isNull()) {
87265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        WebProcess::shared().connection()->send(Messages::WebContext::DidPerformServerRedirect(webPage->pageID(),
87365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            loader->serverRedirectSourceForHistory(), loader->serverRedirectDestinationForHistory(), m_frame->frameID()), 0);
87465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
87565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
87665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
87781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool WebFrameLoaderClient::shouldGoToHistoryItem(HistoryItem* item) const
87881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
87981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebPage* webPage = m_frame->page();
88081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!webPage)
88181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return false;
88281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
88381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    uint64_t itemID = WebBackForwardListProxy::idForItem(item);
88481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!itemID) {
88581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        // We should never be considering navigating to an item that is not actually in the back/forward list.
88681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        ASSERT_NOT_REACHED();
88781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return false;
88881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    }
88981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
89081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    bool shouldGoToBackForwardListItem;
89181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!webPage->sendSync(Messages::WebPageProxy::ShouldGoToBackForwardListItem(itemID), Messages::WebPageProxy::ShouldGoToBackForwardListItem::Reply(shouldGoToBackForwardListItem)))
89281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return false;
89381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
89481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    return shouldGoToBackForwardListItem;
89581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
89681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
89781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool WebFrameLoaderClient::shouldStopLoadingForHistoryItem(HistoryItem* item) const
89865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
89965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return true;
90065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
90165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
90265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidAddBackForwardItem(HistoryItem*) const
90365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
90465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
90565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
90665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
90765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidRemoveBackForwardItem(HistoryItem*) const
90865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
90965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
91065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
91165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
91265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidChangeBackForwardIndex() const
91365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
91465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
91565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
91665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
91765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::didDisplayInsecureContent()
91865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
91965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
92065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
92165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
92265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
92365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
92465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
92565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didDisplayInsecureContentForFrame(webPage, m_frame, userData);
92665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
92765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidDisplayInsecureContentForFrame(m_frame->frameID(), InjectedBundleUserMessageEncoder(userData.get())));
92865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
92965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
9302fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid WebFrameLoaderClient::didRunInsecureContent(SecurityOrigin*, const KURL&)
93165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
93265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
93365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
93465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
93565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
93665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<APIObject> userData;
93765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
93865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didRunInsecureContentForFrame(webPage, m_frame, userData);
93965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
94065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidRunInsecureContentForFrame(m_frame->frameID(), InjectedBundleUserMessageEncoder(userData.get())));
94165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
94265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
94365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochResourceError WebFrameLoaderClient::cancelledError(const ResourceRequest& request)
94465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
94565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return WebKit::cancelledError(request);
94665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
94765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
94865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochResourceError WebFrameLoaderClient::blockedError(const ResourceRequest& request)
94965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
95065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return WebKit::blockedError(request);
95165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
95265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
95365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochResourceError WebFrameLoaderClient::cannotShowURLError(const ResourceRequest& request)
95465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
95565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return WebKit::cannotShowURLError(request);
95665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
95765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
95865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochResourceError WebFrameLoaderClient::interruptForPolicyChangeError(const ResourceRequest& request)
95965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
96065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return WebKit::interruptForPolicyChangeError(request);
96165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
96265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
96365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochResourceError WebFrameLoaderClient::cannotShowMIMETypeError(const ResourceResponse& response)
96465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
96565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return WebKit::cannotShowMIMETypeError(response);
96665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
96765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
96865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochResourceError WebFrameLoaderClient::fileDoesNotExistError(const ResourceResponse& response)
96965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
97065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return WebKit::fileDoesNotExistError(response);
97165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
97265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
97365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochResourceError WebFrameLoaderClient::pluginWillHandleLoadError(const ResourceResponse& response)
97465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
97565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return WebKit::pluginWillHandleLoadError(response);
97665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
97765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
97865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameLoaderClient::shouldFallBack(const ResourceError& error)
97965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
98065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    DEFINE_STATIC_LOCAL(const ResourceError, cancelledError, (this->cancelledError(ResourceRequest())));
98165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    DEFINE_STATIC_LOCAL(const ResourceError, pluginWillHandleLoadError, (this->pluginWillHandleLoadError(ResourceResponse())));
98265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
98365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (error.errorCode() == cancelledError.errorCode() && error.domain() == cancelledError.domain())
98465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return false;
98565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
98665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (error.errorCode() == pluginWillHandleLoadError.errorCode() && error.domain() == pluginWillHandleLoadError.domain())
98765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return false;
98865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
98965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return true;
99065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
99165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
99265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameLoaderClient::canHandleRequest(const ResourceRequest&) const
99365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
99465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
99565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return true;
99665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
99765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
99865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameLoaderClient::canShowMIMEType(const String& MIMEType) const
99965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
100065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
100165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return true;
100265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
100365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
100465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameLoaderClient::canShowMIMETypeAsHTML(const String& MIMEType) const
100565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
100665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return true;
100765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
100865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
100965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameLoaderClient::representationExistsForURLScheme(const String& URLScheme) const
101065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
101165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
101265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return false;
101365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
101465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
101565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochString WebFrameLoaderClient::generatedMIMETypeForURLScheme(const String& URLScheme) const
101665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
101765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
101865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return String();
101965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
102065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
102165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::frameLoadCompleted()
102265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
102365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
102465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
102565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
102665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::saveViewStateToItem(HistoryItem*)
102765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
102865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
102965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
103065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
103165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::restoreViewState()
103265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
10332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    // Inform the UI process of the scale factor.
10342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    double scaleFactor = m_frame->coreFrame()->loader()->history()->currentItem()->pageScaleFactor();
10352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    m_frame->page()->send(Messages::WebPageProxy::ViewScaleFactorDidChange(scaleFactor));
103681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
103781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // FIXME: This should not be necessary. WebCore should be correctly invalidating
103881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // the view on restores from the back/forward cache.
103981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (m_frame == m_frame->page()->mainFrame())
104081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        m_frame->page()->drawingArea()->setNeedsDisplay(m_frame->page()->bounds());
104165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
104265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
104365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::provisionalLoadStarted()
104465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
104565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
104665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
104765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
104865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::didFinishLoad()
104965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
105065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // If we have a load listener, notify it.
105165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (WebFrame::LoadListener* loadListener = m_frame->loadListener())
105265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        loadListener->didFinishLoad(m_frame);
105365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
105465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
105565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::prepareForDataSourceReplacement()
105665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
105765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
105865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
105965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
106065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<DocumentLoader> WebFrameLoaderClient::createDocumentLoader(const ResourceRequest& request, const SubstituteData& data)
106165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
106265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return DocumentLoader::create(request, data);
106365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
106465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid WebFrameLoaderClient::setTitle(const StringWithDirection& title, const KURL& url)
106665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
106765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
10682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    if (!webPage || !webPage->pageGroup()->isVisibleToHistoryClient())
106965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
107065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
10712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // FIXME: use direction of title.
107265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebProcess::shared().connection()->send(Messages::WebContext::DidUpdateHistoryTitle(webPage->pageID(),
10732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch        title.string(), url.string(), m_frame->frameID()), 0);
107465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
107565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
107665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochString WebFrameLoaderClient::userAgent(const KURL&)
107765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
107865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
107965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
108065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return String();
108165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
108265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return webPage->userAgent();
108365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
108465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
108565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::savePlatformDataToCachedFrame(CachedFrame*)
108665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
108765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
108865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
108965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::transitionToCommittedFromCachedFrame(CachedFrame*)
109065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
10912bde8e466a4451c7319e3a072d118917957d6554Steve Block    WebPage* webPage = m_frame->page();
10922bde8e466a4451c7319e3a072d118917957d6554Steve Block    bool isMainFrame = webPage->mainFrame() == m_frame;
10932bde8e466a4451c7319e3a072d118917957d6554Steve Block
10942bde8e466a4451c7319e3a072d118917957d6554Steve Block    const String& mimeType = m_frame->coreFrame()->loader()->documentLoader()->response().mimeType();
10952bde8e466a4451c7319e3a072d118917957d6554Steve Block    m_frameHasCustomRepresentation = isMainFrame && WebProcess::shared().shouldUseCustomRepresentationForMIMEType(mimeType);
109665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
109765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
109865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::transitionToCommittedForNewPage()
109965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
110065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
110165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    Color backgroundColor = webPage->drawsTransparentBackground() ? Color::transparent : Color::white;
110265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
110365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    bool isMainFrame = webPage->mainFrame() == m_frame;
110465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
110565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(TILED_BACKING_STORE)
110665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    IntSize currentVisibleContentSize = m_frame->coreFrame()->view() ? m_frame->coreFrame()->view()->actualVisibleContentRect().size() : IntSize();
110765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_frame->coreFrame()->createView(webPage->size(), backgroundColor, false, webPage->resizesToContentsLayoutSize(), isMainFrame && webPage->resizesToContentsEnabled());
110865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
110965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (isMainFrame && webPage->resizesToContentsEnabled()) {
111065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_frame->coreFrame()->view()->setDelegatesScrolling(true);
111165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        m_frame->coreFrame()->view()->setPaintsEntireContents(true);
111265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
111365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
111465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // The HistoryController will update the scroll position later if needed.
111565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_frame->coreFrame()->view()->setActualVisibleContentRect(IntRect(IntPoint::zero(), currentVisibleContentSize));
111665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#else
111765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    const String& mimeType = m_frame->coreFrame()->loader()->documentLoader()->response().mimeType();
111865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_frameHasCustomRepresentation = isMainFrame && WebProcess::shared().shouldUseCustomRepresentationForMIMEType(mimeType);
111965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
112065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_frame->coreFrame()->createView(webPage->size(), backgroundColor, false, IntSize(), false);
112165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
112265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
112365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_frame->coreFrame()->view()->setTransparent(!webPage->drawsBackground());
112465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
112565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
112665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::didSaveToPageCache()
112765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
112865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
112965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
113065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
113165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
113265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_frame->isMainFrame())
113365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
113465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
113565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidSaveFrameToPageCache(m_frame->frameID()));
113665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
113765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
113865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::didRestoreFromPageCache()
113965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
114065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
114165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
114265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
114365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
114465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (m_frame->isMainFrame())
114565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
114665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
114765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebFrame* parentFrame = static_cast<WebFrameLoaderClient*>(m_frame->coreFrame()->tree()->parent()->loader()->client())->webFrame();
114865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::DidRestoreFrameFromPageCache(m_frame->frameID(), parentFrame->frameID()));
114965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
115065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
115165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidBecomeFrameset(bool value)
115265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
115365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
115465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
115565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
115665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
115765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->send(Messages::WebPageProxy::FrameDidBecomeFrameSet(m_frame->frameID(), value));
115865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
115965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
116065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameLoaderClient::canCachePage() const
116165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
116265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // We cannot cache frames that have custom representations because they are
116365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // rendered in the UIProcess.
116465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return !m_frameHasCustomRepresentation;
116565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
116665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
116765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::download(ResourceHandle* handle, const ResourceRequest& request, const ResourceRequest& initialRequest, const ResourceResponse& response)
116865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
116965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_frame->convertHandleToDownload(handle, request, initialRequest, response);
117065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
117165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
117265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<Frame> WebFrameLoaderClient::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
117365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch                                                    const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight)
117465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
117565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
117665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
117765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<WebFrame> subframe = WebFrame::createSubframe(webPage, name, ownerElement);
117865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
117965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    Frame* coreSubframe = subframe->coreFrame();
118065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
118165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch     // The creation of the frame may have run arbitrary JavaScript that removed it from the page already.
118265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_frame->coreFrame()->loader()->loadURLIntoChildFrame(url, referrer, coreSubframe);
118365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
118465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // The frame's onload handler may have removed it from the document.
118565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!coreSubframe->tree()->parent())
118665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return 0;
118765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
118865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return coreSubframe;
118965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
119065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
119165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::didTransferChildFrameToNewDocument(Page*)
119265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
119365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
119465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
119565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
119665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::transferLoadingResourceFromPage(unsigned long, DocumentLoader*, const ResourceRequest&, Page*)
119765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
119865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
119965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
120065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
120165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<Widget> WebFrameLoaderClient::createPlugin(const IntSize&, HTMLPlugInElement* pluginElement, const KURL& url, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually)
120265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
120365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(paramNames.size() == paramValues.size());
120465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
120565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
120665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(webPage);
120765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
120865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    Plugin::Parameters parameters;
120965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.url = url;
121065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.names = paramNames;
121165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.values = paramValues;
121265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.mimeType = mimeType;
121365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    parameters.loadManually = loadManually;
121465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
121565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // <rdar://problem/8440903>: AppleConnect has a bug where it does not
121665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // understand the parameter names specified in the <object> element that
121765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // embeds its plug-in. This hack works around the issue by converting the
121865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // parameter names to lowercase before passing them to the plug-in.
121965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: This workaround should be dependent on site-specific quirks being
122065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // enabled. This requires adding this setting to WebKit2's WebPreferences
122165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // implementation. See <https://bugs.webkit.org/show_bug.cgi?id=46076>.
122265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (equalIgnoringCase(mimeType, "application/x-snkp")) {
122365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        for (size_t i = 0; i < paramNames.size(); ++i)
122465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            parameters.names[i] = paramNames[i].lower();
122565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
122665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12272bde8e466a4451c7319e3a072d118917957d6554Steve Block#if PLUGIN_ARCHITECTURE(X11)
12282bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (equalIgnoringCase(mimeType, "application/x-shockwave-flash")) {
12292bde8e466a4451c7319e3a072d118917957d6554Steve Block        // Currently we don't support transparency and windowed mode.
12302bde8e466a4451c7319e3a072d118917957d6554Steve Block        // Inject wmode=opaque to make Flash work in these conditions.
12312bde8e466a4451c7319e3a072d118917957d6554Steve Block        size_t wmodeIndex = parameters.names.find("wmode");
12322bde8e466a4451c7319e3a072d118917957d6554Steve Block        if (wmodeIndex == -1) {
12332bde8e466a4451c7319e3a072d118917957d6554Steve Block            parameters.names.append("wmode");
12342bde8e466a4451c7319e3a072d118917957d6554Steve Block            parameters.values.append("opaque");
12352bde8e466a4451c7319e3a072d118917957d6554Steve Block        } else if (equalIgnoringCase(parameters.values[wmodeIndex], "window"))
12362bde8e466a4451c7319e3a072d118917957d6554Steve Block            parameters.values[wmodeIndex] = "opaque";
12372bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
12382bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif
12392bde8e466a4451c7319e3a072d118917957d6554Steve Block
124065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    RefPtr<Plugin> plugin = webPage->createPlugin(parameters);
124165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!plugin)
124265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return 0;
124365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
124465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return PluginView::create(pluginElement, plugin.release(), parameters);
124565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
124665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
124765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::redirectDataToPlugin(Widget* pluginWidget)
124865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
124965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(!m_pluginView);
125065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    ASSERT(pluginWidget);
125165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
125265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    m_pluginView = static_cast<PluginView*>(pluginWidget);
125365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
125465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
125565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<Widget> WebFrameLoaderClient::createJavaAppletWidget(const IntSize& pluginSize, HTMLAppletElement* appletElement, const KURL& baseURL, const Vector<String>& paramNames, const Vector<String>& paramValues)
125665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
125765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return createPlugin(pluginSize, appletElement, KURL(), paramNames, paramValues, "application/x-java-applet", false);
125865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
125965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12602bde8e466a4451c7319e3a072d118917957d6554Steve Blockstatic bool pluginSupportsExtension(PluginData* pluginData, const String& extension)
12612bde8e466a4451c7319e3a072d118917957d6554Steve Block{
12622bde8e466a4451c7319e3a072d118917957d6554Steve Block    ASSERT(extension.lower() == extension);
12632bde8e466a4451c7319e3a072d118917957d6554Steve Block
12642bde8e466a4451c7319e3a072d118917957d6554Steve Block    for (size_t i = 0; i < pluginData->mimes().size(); ++i) {
12652bde8e466a4451c7319e3a072d118917957d6554Steve Block        const MimeClassInfo& mimeClassInfo = pluginData->mimes()[i];
12662bde8e466a4451c7319e3a072d118917957d6554Steve Block
12672bde8e466a4451c7319e3a072d118917957d6554Steve Block        if (mimeClassInfo.extensions.contains(extension))
12682bde8e466a4451c7319e3a072d118917957d6554Steve Block            return true;
12692bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
12702bde8e466a4451c7319e3a072d118917957d6554Steve Block    return false;
12712bde8e466a4451c7319e3a072d118917957d6554Steve Block}
12722bde8e466a4451c7319e3a072d118917957d6554Steve Block
12732bde8e466a4451c7319e3a072d118917957d6554Steve BlockObjectContentType WebFrameLoaderClient::objectContentType(const KURL& url, const String& mimeTypeIn, bool shouldPreferPlugInsForImages)
127465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
127565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // FIXME: This should be merged with WebCore::FrameLoader::defaultObjectContentType when the plugin code
127665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    // is consolidated.
127765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
127865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    String mimeType = mimeTypeIn;
12792bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (mimeType.isEmpty()) {
12802bde8e466a4451c7319e3a072d118917957d6554Steve Block        String extension = url.path().substring(url.path().reverseFind('.') + 1).lower();
12812bde8e466a4451c7319e3a072d118917957d6554Steve Block
12822bde8e466a4451c7319e3a072d118917957d6554Steve Block        // Try to guess the MIME type from the extension.
12832bde8e466a4451c7319e3a072d118917957d6554Steve Block        mimeType = MIMETypeRegistry::getMIMETypeForExtension(extension);
12842bde8e466a4451c7319e3a072d118917957d6554Steve Block
12852bde8e466a4451c7319e3a072d118917957d6554Steve Block        if (mimeType.isEmpty()) {
12862bde8e466a4451c7319e3a072d118917957d6554Steve Block            // Check if there's a plug-in around that can handle the extension.
12872bde8e466a4451c7319e3a072d118917957d6554Steve Block            if (WebPage* webPage = m_frame->page()) {
12882bde8e466a4451c7319e3a072d118917957d6554Steve Block                if (PluginData* pluginData = webPage->corePage()->pluginData()) {
12892bde8e466a4451c7319e3a072d118917957d6554Steve Block                    if (pluginSupportsExtension(pluginData, extension))
12902bde8e466a4451c7319e3a072d118917957d6554Steve Block                        return ObjectContentNetscapePlugin;
12912bde8e466a4451c7319e3a072d118917957d6554Steve Block                }
12922bde8e466a4451c7319e3a072d118917957d6554Steve Block            }
12932bde8e466a4451c7319e3a072d118917957d6554Steve Block        }
12942bde8e466a4451c7319e3a072d118917957d6554Steve Block    }
129565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
129665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (mimeType.isEmpty())
129765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return ObjectContentFrame;
129865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
12992bde8e466a4451c7319e3a072d118917957d6554Steve Block    bool plugInSupportsMIMEType = false;
130065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (WebPage* webPage = m_frame->page()) {
130165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        if (PluginData* pluginData = webPage->corePage()->pluginData()) {
130265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch            if (pluginData->supportsMimeType(mimeType))
13032bde8e466a4451c7319e3a072d118917957d6554Steve Block                plugInSupportsMIMEType = true;
130465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        }
130565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    }
13062bde8e466a4451c7319e3a072d118917957d6554Steve Block
13072bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (MIMETypeRegistry::isSupportedImageMIMEType(mimeType))
13082bde8e466a4451c7319e3a072d118917957d6554Steve Block        return shouldPreferPlugInsForImages && plugInSupportsMIMEType ? ObjectContentNetscapePlugin : ObjectContentImage;
13092bde8e466a4451c7319e3a072d118917957d6554Steve Block
13102bde8e466a4451c7319e3a072d118917957d6554Steve Block    if (plugInSupportsMIMEType)
13112bde8e466a4451c7319e3a072d118917957d6554Steve Block        return ObjectContentNetscapePlugin;
131265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
131365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (MIMETypeRegistry::isSupportedNonImageMIMEType(mimeType))
131465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return ObjectContentFrame;
131565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
131665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return ObjectContentNone;
131765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
131865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
131965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochString WebFrameLoaderClient::overrideMediaType() const
132065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
132165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
132265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return String();
132365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
132465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
132565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::dispatchDidClearWindowObjectInWorld(DOMWrapperWorld* world)
132665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
132765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    WebPage* webPage = m_frame->page();
132865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    if (!webPage)
132965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch        return;
133065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
133165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    webPage->injectedBundleLoaderClient().didClearWindowObjectForFrame(webPage, m_frame, world);
133265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
133365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
133465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::documentElementAvailable()
133565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
133665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
133765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
133865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
133965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::didPerformFirstNavigation() const
134065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
134165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
134265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
134365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
134465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochvoid WebFrameLoaderClient::registerForIconNotification(bool listen)
134565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
134665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
134765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
134865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
134965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if PLATFORM(MAC)
135065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
135165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochRemoteAXObjectRef WebFrameLoaderClient::accessibilityRemoteObject()
135265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
135365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return m_frame->page()->accessibilityRemoteObject();
135465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
135565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
135665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if ENABLE(MAC_JAVA_BRIDGE)
135765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochjobject WebFrameLoaderClient::javaApplet(NSView*) { return 0; }
135865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
135965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochNSCachedURLResponse* WebFrameLoaderClient::willCacheResponse(DocumentLoader*, unsigned long identifier, NSCachedURLResponse* response) const
136065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
136165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return response;
136265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
136365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
136465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
136565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#if USE(CFNETWORK)
136665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameLoaderClient::shouldCacheResponse(DocumentLoader*, unsigned long identifier, const ResourceResponse&, const unsigned char* data, unsigned long long length)
136765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
136865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return true;
136965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
137065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
137165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#endif
137265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
137365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochbool WebFrameLoaderClient::shouldUsePluginDocument(const String& /*mimeType*/) const
137465f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
137565f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    notImplemented();
137665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return false;
137765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
137865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
137981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid WebFrameLoaderClient::didChangeScrollOffset()
138081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{
138181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    WebPage* webPage = m_frame->page();
138281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!webPage)
138381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
138481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
138581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!m_frame->isMainFrame())
138681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
138781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
138881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // If this is called when tearing down a FrameView, the WebCore::Frame's
138981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    // current FrameView will be null.
139081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    if (!m_frame->coreFrame()->view())
139181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch        return;
139281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
139381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch    webPage->didChangeScrollOffsetForMainFrame();
139481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch}
139581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch
139665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben MurdochPassRefPtr<FrameNetworkingContext> WebFrameLoaderClient::createNetworkingContext()
139765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch{
139865f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch    return WebFrameNetworkingContext::create(m_frame->coreFrame());
139965f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch}
140065f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch
140165f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch} // namespace WebKit
1402