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