2 * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com>
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
20 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
22 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 #include "FrameLoaderClientWinCE.h"
28 #include "DocumentLoader.h"
29 #include "FrameLoader.h"
30 #include "FrameNetworkingContextWinCE.h"
31 #include "FrameView.h"
32 #include "HTMLFormElement.h"
33 #include "MIMETypeRegistry.h"
34 #include "NotImplemented.h"
36 #include "PluginDatabase.h"
37 #include "RenderPart.h"
40 using namespace WebCore;
44 FrameLoaderClientWinCE::FrameLoaderClientWinCE(WebView* view)
51 FrameLoaderClientWinCE::~FrameLoaderClientWinCE()
55 String FrameLoaderClientWinCE::userAgent(const KURL&)
60 PassRefPtr<DocumentLoader> FrameLoaderClientWinCE::createDocumentLoader(const WebCore::ResourceRequest& request, const SubstituteData& substituteData)
62 return DocumentLoader::create(request, substituteData);
65 void FrameLoaderClientWinCE::committedLoad(DocumentLoader* loader, const char* data, int length)
68 if (!m_hasSentResponseToPlugin) {
69 m_pluginView->didReceiveResponse(loader->response());
70 m_hasSentResponseToPlugin = true;
72 m_pluginView->didReceiveData(data, length);
74 loader->commitData(data, length);
77 bool FrameLoaderClientWinCE::shouldUseCredentialStorage(DocumentLoader*, unsigned long)
83 void FrameLoaderClientWinCE::dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
88 void FrameLoaderClientWinCE::dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
93 void FrameLoaderClientWinCE::dispatchWillSendRequest(DocumentLoader*, unsigned long, WebCore::ResourceRequest&, const WebCore::ResourceResponse&)
98 void FrameLoaderClientWinCE::assignIdentifierToInitialRequest(unsigned long, DocumentLoader*, const WebCore::ResourceRequest&)
103 void FrameLoaderClientWinCE::postProgressStartedNotification()
108 void FrameLoaderClientWinCE::postProgressEstimateChangedNotification()
113 void FrameLoaderClientWinCE::postProgressFinishedNotification()
118 void FrameLoaderClientWinCE::frameLoaderDestroyed()
125 void FrameLoaderClientWinCE::dispatchDidReceiveResponse(DocumentLoader*, unsigned long, const ResourceResponse& response)
127 m_response = response;
130 void FrameLoaderClientWinCE::dispatchDecidePolicyForMIMEType(FramePolicyFunction policyFunction, const String& mimeType, const WebCore::ResourceRequest&)
132 if (canShowMIMEType(mimeType))
133 (m_frame->loader()->policyChecker()->*policyFunction)(PolicyUse);
135 (m_frame->loader()->policyChecker()->*policyFunction)(PolicyDownload);
138 void FrameLoaderClientWinCE::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction policyFunction, const NavigationAction&, const WebCore::ResourceRequest&, PassRefPtr<FormState>, const String&)
140 (m_frame->loader()->policyChecker()->*policyFunction)(PolicyUse);
143 void FrameLoaderClientWinCE::dispatchDecidePolicyForNavigationAction(FramePolicyFunction policyFunction, const NavigationAction&, const WebCore::ResourceRequest&, PassRefPtr<FormState>)
145 (m_frame->loader()->policyChecker()->*policyFunction)(PolicyUse);
148 void FrameLoaderClientWinCE::dispatchWillSubmitForm(FramePolicyFunction policyFunction, PassRefPtr<FormState>)
150 (m_frame->loader()->policyChecker()->*policyFunction)(PolicyUse);
153 PassRefPtr<Widget> FrameLoaderClientWinCE::createPlugin(const IntSize&, HTMLPlugInElement*, const KURL&, const Vector<String>&, const Vector<String>&, const String&, bool)
158 PassRefPtr<Frame> FrameLoaderClientWinCE::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
159 const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight)
161 return m_webView->createFrame(url, name, ownerElement, referrer, allowsScrolling, marginWidth, marginHeight);
164 void FrameLoaderClientWinCE::didTransferChildFrameToNewDocument(Page*)
168 void FrameLoaderClientWinCE::transferLoadingResourceFromPage(unsigned long, DocumentLoader*, const WebCore::ResourceRequest&, Page*)
172 void FrameLoaderClientWinCE::redirectDataToPlugin(Widget* pluginWidget)
174 ASSERT(!m_pluginView);
175 m_pluginView = static_cast<PluginView*>(pluginWidget);
176 m_hasSentResponseToPlugin = false;
179 PassRefPtr<Widget> FrameLoaderClientWinCE::createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL&, const Vector<String>&, const Vector<String>&)
185 ObjectContentType FrameLoaderClientWinCE::objectContentType(const KURL& url, const String& mimeType)
187 return FrameLoader::defaultObjectContentType(url, mimeType);
190 String FrameLoaderClientWinCE::overrideMediaType() const
196 void FrameLoaderClientWinCE::dispatchDidClearWindowObjectInWorld(DOMWrapperWorld*)
201 void FrameLoaderClientWinCE::documentElementAvailable()
206 void FrameLoaderClientWinCE::didPerformFirstNavigation() const
211 void FrameLoaderClientWinCE::registerForIconNotification(bool)
216 void FrameLoaderClientWinCE::setMainFrameDocumentReady(bool)
221 bool FrameLoaderClientWinCE::hasWebView() const
226 void FrameLoaderClientWinCE::dispatchDidFinishLoad()
231 void FrameLoaderClientWinCE::frameLoadCompleted()
236 void FrameLoaderClientWinCE::saveViewStateToItem(HistoryItem*)
241 void FrameLoaderClientWinCE::restoreViewState()
246 bool FrameLoaderClientWinCE::shouldGoToHistoryItem(HistoryItem* item) const
251 void FrameLoaderClientWinCE::dispatchDidAddBackForwardItem(HistoryItem*) const
255 void FrameLoaderClientWinCE::dispatchDidRemoveBackForwardItem(HistoryItem*) const
259 void FrameLoaderClientWinCE::dispatchDidChangeBackForwardIndex() const
263 void FrameLoaderClientWinCE::didDisplayInsecureContent()
268 void FrameLoaderClientWinCE::didRunInsecureContent(SecurityOrigin*)
273 void FrameLoaderClientWinCE::makeRepresentation(DocumentLoader*)
278 void FrameLoaderClientWinCE::forceLayout()
283 void FrameLoaderClientWinCE::forceLayoutForNonHTML()
288 void FrameLoaderClientWinCE::setCopiesOnScroll()
293 void FrameLoaderClientWinCE::detachedFromParent2()
298 void FrameLoaderClientWinCE::detachedFromParent3()
303 void FrameLoaderClientWinCE::dispatchDidHandleOnloadEvents()
308 void FrameLoaderClientWinCE::dispatchDidReceiveServerRedirectForProvisionalLoad()
313 void FrameLoaderClientWinCE::dispatchDidCancelClientRedirect()
318 void FrameLoaderClientWinCE::dispatchWillPerformClientRedirect(const KURL&, double, double)
323 void FrameLoaderClientWinCE::dispatchDidChangeLocationWithinPage()
328 void FrameLoaderClientWinCE::dispatchDidPushStateWithinPage()
333 void FrameLoaderClientWinCE::dispatchDidReplaceStateWithinPage()
338 void FrameLoaderClientWinCE::dispatchDidPopStateWithinPage()
343 void FrameLoaderClientWinCE::dispatchWillClose()
348 void FrameLoaderClientWinCE::dispatchDidReceiveIcon()
353 void FrameLoaderClientWinCE::dispatchDidStartProvisionalLoad()
358 void FrameLoaderClientWinCE::dispatchDidReceiveTitle(const String&)
363 void FrameLoaderClientWinCE::dispatchDidChangeIcons()
368 void FrameLoaderClientWinCE::dispatchDidCommitLoad()
373 void FrameLoaderClientWinCE::dispatchDidFinishDocumentLoad()
378 void FrameLoaderClientWinCE::dispatchDidFirstLayout()
383 void FrameLoaderClientWinCE::dispatchDidFirstVisuallyNonEmptyLayout()
388 void FrameLoaderClientWinCE::dispatchShow()
393 void FrameLoaderClientWinCE::cancelPolicyCheck()
398 void FrameLoaderClientWinCE::dispatchDidLoadMainResource(DocumentLoader*)
403 void FrameLoaderClientWinCE::revertToProvisionalState(DocumentLoader*)
408 void FrameLoaderClientWinCE::willChangeTitle(DocumentLoader*)
413 void FrameLoaderClientWinCE::didChangeTitle(DocumentLoader* documentLoader)
415 setTitle(documentLoader->title(), documentLoader->url());
418 bool FrameLoaderClientWinCE::canHandleRequest(const WebCore::ResourceRequest&) const
424 bool FrameLoaderClientWinCE::canShowMIMEType(const String& type) const
426 return (MIMETypeRegistry::isSupportedImageMIMEType(type)
427 || MIMETypeRegistry::isSupportedNonImageMIMEType(type)
428 || MIMETypeRegistry::isSupportedMediaMIMEType(type)
429 || PluginDatabase::installedPlugins()->isMIMETypeRegistered(type));
432 bool FrameLoaderClientWinCE::canShowMIMETypeAsHTML(const String&) const
438 bool FrameLoaderClientWinCE::representationExistsForURLScheme(const String&) const
444 String FrameLoaderClientWinCE::generatedMIMETypeForURLScheme(const String&) const
450 void FrameLoaderClientWinCE::finishedLoading(DocumentLoader* documentLoader)
453 FrameLoader* loader = documentLoader->frameLoader();
454 loader->writer()->setEncoding(m_response.textEncodingName(), false);
458 m_pluginView->didFinishLoading();
460 m_hasSentResponseToPlugin = false;
463 void FrameLoaderClientWinCE::provisionalLoadStarted()
468 void FrameLoaderClientWinCE::didFinishLoad()
473 void FrameLoaderClientWinCE::prepareForDataSourceReplacement()
478 void FrameLoaderClientWinCE::setTitle(const String&, const KURL&)
483 void FrameLoaderClientWinCE::dispatchDidReceiveContentLength(DocumentLoader*, unsigned long, int)
488 void FrameLoaderClientWinCE::dispatchDidFinishLoading(DocumentLoader*, unsigned long)
493 void FrameLoaderClientWinCE::dispatchDidFailLoading(DocumentLoader*, unsigned long, const ResourceError&)
498 bool FrameLoaderClientWinCE::dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&, int)
504 void FrameLoaderClientWinCE::dispatchDidFailProvisionalLoad(const ResourceError& error)
506 dispatchDidFailLoad(error);
509 void FrameLoaderClientWinCE::dispatchDidFailLoad(const ResourceError&)
514 void FrameLoaderClientWinCE::download(ResourceHandle*, const WebCore::ResourceRequest&, const WebCore::ResourceRequest&, const WebCore::ResourceResponse&)
519 ResourceError FrameLoaderClientWinCE::cancelledError(const WebCore::ResourceRequest&)
521 return ResourceError();
524 ResourceError FrameLoaderClientWinCE::blockedError(const WebCore::ResourceRequest&)
526 return ResourceError();
529 ResourceError FrameLoaderClientWinCE::cannotShowURLError(const WebCore::ResourceRequest&)
531 return ResourceError();
534 ResourceError FrameLoaderClientWinCE::interruptForPolicyChangeError(const WebCore::ResourceRequest&)
536 return ResourceError();
539 ResourceError FrameLoaderClientWinCE::cannotShowMIMETypeError(const WebCore::ResourceResponse&)
541 return ResourceError();
544 ResourceError FrameLoaderClientWinCE::fileDoesNotExistError(const WebCore::ResourceResponse&)
546 return ResourceError();
549 ResourceError FrameLoaderClientWinCE::pluginWillHandleLoadError(const WebCore::ResourceResponse&)
551 return ResourceError();
554 bool FrameLoaderClientWinCE::shouldFallBack(const ResourceError& error)
556 return !(error.isCancellation());
559 bool FrameLoaderClientWinCE::canCachePage() const
564 Frame* FrameLoaderClientWinCE::dispatchCreatePage(const NavigationAction&)
570 void FrameLoaderClientWinCE::dispatchUnableToImplementPolicy(const ResourceError&)
575 void FrameLoaderClientWinCE::setMainDocumentError(DocumentLoader*, const ResourceError& error)
580 m_pluginView->didFail(error);
582 m_hasSentResponseToPlugin = false;
585 void FrameLoaderClientWinCE::startDownload(const WebCore::ResourceRequest&)
590 void FrameLoaderClientWinCE::updateGlobalHistory()
595 void FrameLoaderClientWinCE::updateGlobalHistoryRedirectLinks()
600 void FrameLoaderClientWinCE::savePlatformDataToCachedFrame(CachedFrame*)
605 void FrameLoaderClientWinCE::transitionToCommittedFromCachedFrame(CachedFrame*)
610 void FrameLoaderClientWinCE::transitionToCommittedForNewPage()
612 Page* page = m_frame->page();
615 bool isMainFrame = m_frame == page->mainFrame();
619 RefPtr<FrameView> frameView;
622 m_webView->frameRect(&rect);
623 frameView = FrameView::create(m_frame, IntRect(rect).size());
625 frameView = FrameView::create(m_frame);
627 m_frame->setView(frameView);
629 if (m_frame->ownerRenderer())
630 m_frame->ownerRenderer()->setWidget(frameView);
633 void FrameLoaderClientWinCE::dispatchDidBecomeFrameset(bool)
637 PassRefPtr<WebCore::FrameNetworkingContext> FrameLoaderClientWinCE::createNetworkingContext()
639 return FrameNetworkingContextWinCE::create(m_frame, userAgent(KURL()));
642 } // namespace WebKit