Home | History | Annotate | Download | only in WebKitSupport
      1 /*
      2  * Copyright (C) 2007 Kevin Ollivier <kevino (at) theolliviers.com>
      3  * Copyright (C) 2011 Apple Inc. All rights reserved.
      4  *
      5  * All rights reserved.
      6  *
      7  * Redistribution and use in source and binary forms, with or without
      8  * modification, are permitted provided that the following conditions
      9  * are met:
     10  * 1. Redistributions of source code must retain the above copyright
     11  *    notice, this list of conditions and the following disclaimer.
     12  * 2. Redistributions in binary form must reproduce the above copyright
     13  *    notice, this list of conditions and the following disclaimer in the
     14  *    documentation and/or other materials provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
     17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
     20  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     21  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     24  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 #include "config.h"
     30 #include "FrameLoaderClientWx.h"
     31 
     32 #include <JavaScriptCore/JavaScript.h>
     33 #include <JavaScriptCore/APICast.h>
     34 
     35 #include "DocumentLoader.h"
     36 #include "FormState.h"
     37 #include "Frame.h"
     38 #include "FrameLoaderTypes.h"
     39 #include "FrameView.h"
     40 #include "FrameTree.h"
     41 #include "PluginView.h"
     42 #include "HTMLFormElement.h"
     43 #include "HTMLFrameOwnerElement.h"
     44 #include "NotImplemented.h"
     45 #include "Page.h"
     46 #include "PlatformString.h"
     47 #include "PluginView.h"
     48 #include "ProgressTracker.h"
     49 #include "RenderPart.h"
     50 #include "ResourceError.h"
     51 #include "ResourceResponse.h"
     52 #include "ScriptController.h"
     53 #include <wtf/PassRefPtr.h>
     54 #include <wtf/RefPtr.h>
     55 
     56 #include <stdio.h>
     57 
     58 #include "FrameNetworkingContextWx.h"
     59 #include "WebFrame.h"
     60 #include "WebFramePrivate.h"
     61 #include "WebView.h"
     62 #include "WebViewPrivate.h"
     63 
     64 namespace WebCore {
     65 
     66 inline int wxNavTypeFromWebNavType(NavigationType type){
     67     if (type == NavigationTypeLinkClicked)
     68         return wxWEBVIEW_NAV_LINK_CLICKED;
     69 
     70     if (type == NavigationTypeFormSubmitted)
     71         return wxWEBVIEW_NAV_FORM_SUBMITTED;
     72 
     73     if (type == NavigationTypeBackForward)
     74         return wxWEBVIEW_NAV_BACK_NEXT;
     75 
     76     if (type == NavigationTypeReload)
     77         return wxWEBVIEW_NAV_RELOAD;
     78 
     79     if (type == NavigationTypeFormResubmitted)
     80         return wxWEBVIEW_NAV_FORM_RESUBMITTED;
     81 
     82     return wxWEBVIEW_NAV_OTHER;
     83 }
     84 
     85 FrameLoaderClientWx::FrameLoaderClientWx()
     86     : m_frame(0)
     87     , m_pluginView(0)
     88     , m_hasSentResponseToPlugin(false)
     89     , m_webFrame(0)
     90 {
     91 }
     92 
     93 
     94 FrameLoaderClientWx::~FrameLoaderClientWx()
     95 {
     96 }
     97 
     98 void FrameLoaderClientWx::setFrame(wxWebFrame *frame)
     99 {
    100     m_webFrame = frame;
    101     m_frame = m_webFrame->m_impl->frame;
    102 }
    103 
    104 void FrameLoaderClientWx::setWebView(wxWebView *webview)
    105 {
    106     m_webView = webview;
    107 }
    108 
    109 bool FrameLoaderClientWx::hasWebView() const
    110 {
    111     return m_webView != NULL;
    112 }
    113 
    114 bool FrameLoaderClientWx::hasBackForwardList() const
    115 {
    116     notImplemented();
    117     return true;
    118 }
    119 
    120 
    121 void FrameLoaderClientWx::resetBackForwardList()
    122 {
    123     notImplemented();
    124 }
    125 
    126 
    127 bool FrameLoaderClientWx::provisionalItemIsTarget() const
    128 {
    129     notImplemented();
    130     return false;
    131 }
    132 
    133 void FrameLoaderClientWx::makeRepresentation(DocumentLoader*)
    134 {
    135     notImplemented();
    136 }
    137 
    138 
    139 void FrameLoaderClientWx::forceLayout()
    140 {
    141     notImplemented();
    142 }
    143 
    144 
    145 void FrameLoaderClientWx::forceLayoutForNonHTML()
    146 {
    147     notImplemented();
    148 }
    149 
    150 
    151 void FrameLoaderClientWx::updateHistoryForCommit()
    152 {
    153     notImplemented();
    154 }
    155 
    156 
    157 void FrameLoaderClientWx::updateHistoryForBackForwardNavigation()
    158 {
    159     notImplemented();
    160 }
    161 
    162 
    163 void FrameLoaderClientWx::updateHistoryForReload()
    164 {
    165     notImplemented();
    166 }
    167 
    168 
    169 void FrameLoaderClientWx::updateHistoryForStandardLoad()
    170 {
    171     notImplemented();
    172 }
    173 
    174 
    175 void FrameLoaderClientWx::updateHistoryForInternalLoad()
    176 {
    177     notImplemented();
    178 }
    179 
    180 
    181 void FrameLoaderClientWx::updateHistoryAfterClientRedirect()
    182 {
    183     notImplemented();
    184 }
    185 
    186 
    187 void FrameLoaderClientWx::setCopiesOnScroll()
    188 {
    189     // apparently mac specific
    190     notImplemented();
    191 }
    192 
    193 
    194 LoadErrorResetToken* FrameLoaderClientWx::tokenForLoadErrorReset()
    195 {
    196     notImplemented();
    197     return 0;
    198 }
    199 
    200 
    201 void FrameLoaderClientWx::resetAfterLoadError(LoadErrorResetToken*)
    202 {
    203     notImplemented();
    204 }
    205 
    206 
    207 void FrameLoaderClientWx::doNotResetAfterLoadError(LoadErrorResetToken*)
    208 {
    209     notImplemented();
    210 }
    211 
    212 
    213 void FrameLoaderClientWx::willCloseDocument()
    214 {
    215     notImplemented();
    216 }
    217 
    218 
    219 void FrameLoaderClientWx::detachedFromParent2()
    220 {
    221     notImplemented();
    222 }
    223 
    224 
    225 void FrameLoaderClientWx::detachedFromParent3()
    226 {
    227     notImplemented();
    228 }
    229 
    230 void FrameLoaderClientWx::dispatchDidHandleOnloadEvents()
    231 {
    232     if (m_webView) {
    233         wxWebViewLoadEvent wkEvent(m_webView);
    234         wkEvent.SetState(wxWEBVIEW_LOAD_ONLOAD_HANDLED);
    235         wkEvent.SetURL(m_frame->loader()->documentLoader()->request().url().string());
    236         m_webView->GetEventHandler()->ProcessEvent(wkEvent);
    237     }
    238 }
    239 
    240 
    241 void FrameLoaderClientWx::dispatchDidReceiveServerRedirectForProvisionalLoad()
    242 {
    243     notImplemented();
    244 }
    245 
    246 
    247 void FrameLoaderClientWx::dispatchDidCancelClientRedirect()
    248 {
    249     notImplemented();
    250 }
    251 
    252 
    253 void FrameLoaderClientWx::dispatchWillPerformClientRedirect(const KURL&,
    254                                                             double interval,
    255                                                             double fireDate)
    256 {
    257     notImplemented();
    258 }
    259 
    260 
    261 void FrameLoaderClientWx::dispatchDidChangeLocationWithinPage()
    262 {
    263     notImplemented();
    264 }
    265 
    266 void FrameLoaderClientWx::dispatchDidPushStateWithinPage()
    267 {
    268     notImplemented();
    269 }
    270 
    271 void FrameLoaderClientWx::dispatchDidReplaceStateWithinPage()
    272 {
    273     notImplemented();
    274 }
    275 
    276 void FrameLoaderClientWx::dispatchDidPopStateWithinPage()
    277 {
    278     notImplemented();
    279 }
    280 
    281 void FrameLoaderClientWx::dispatchWillClose()
    282 {
    283     notImplemented();
    284 }
    285 
    286 
    287 void FrameLoaderClientWx::dispatchDidStartProvisionalLoad()
    288 {
    289     if (m_webView) {
    290         wxWebViewLoadEvent wkEvent(m_webView);
    291         wkEvent.SetState(wxWEBVIEW_LOAD_NEGOTIATING);
    292         wkEvent.SetURL(m_frame->loader()->provisionalDocumentLoader()->request().url().string());
    293         m_webView->GetEventHandler()->ProcessEvent(wkEvent);
    294     }
    295 }
    296 
    297 
    298 void FrameLoaderClientWx::dispatchDidReceiveTitle(const StringWithDirection& title)
    299 {
    300     if (m_webView) {
    301         // FIXME: use direction of title.
    302         m_webView->SetPageTitle(title.string());
    303         wxWebViewReceivedTitleEvent wkEvent(m_webView);
    304         wkEvent.SetTitle(title.string());
    305         m_webView->GetEventHandler()->ProcessEvent(wkEvent);
    306     }
    307 }
    308 
    309 
    310 void FrameLoaderClientWx::dispatchDidCommitLoad()
    311 {
    312     if (m_webView) {
    313         wxWebViewLoadEvent wkEvent(m_webView);
    314         wkEvent.SetState(wxWEBVIEW_LOAD_TRANSFERRING);
    315         wkEvent.SetURL(m_frame->loader()->documentLoader()->request().url().string());
    316         m_webView->GetEventHandler()->ProcessEvent(wkEvent);
    317     }
    318 }
    319 
    320 void FrameLoaderClientWx::dispatchDidFinishDocumentLoad()
    321 {
    322     if (m_webView) {
    323         wxWebViewLoadEvent wkEvent(m_webView);
    324         wkEvent.SetState(wxWEBVIEW_LOAD_DOC_COMPLETED);
    325         wkEvent.SetURL(m_frame->document()->url().string());
    326         m_webView->GetEventHandler()->ProcessEvent(wkEvent);
    327     }
    328 }
    329 
    330 void FrameLoaderClientWx::dispatchDidChangeIcons()
    331 {
    332     notImplemented();
    333 }
    334 
    335 void FrameLoaderClientWx::dispatchDidFinishLoad()
    336 {
    337     notImplemented();
    338 }
    339 
    340 
    341 void FrameLoaderClientWx::dispatchDidFirstLayout()
    342 {
    343     notImplemented();
    344 }
    345 
    346 void FrameLoaderClientWx::dispatchDidFirstVisuallyNonEmptyLayout()
    347 {
    348     notImplemented();
    349 }
    350 
    351 void FrameLoaderClientWx::dispatchShow()
    352 {
    353     notImplemented();
    354 }
    355 
    356 
    357 void FrameLoaderClientWx::cancelPolicyCheck()
    358 {
    359     notImplemented();
    360 }
    361 
    362 
    363 void FrameLoaderClientWx::dispatchWillSubmitForm(FramePolicyFunction function,
    364                                                  PassRefPtr<FormState>)
    365 {
    366     // FIXME: Send an event to allow for alerts and cancellation
    367     if (!m_webFrame)
    368         return;
    369     (m_frame->loader()->policyChecker()->*function)(PolicyUse);
    370 }
    371 
    372 
    373 void FrameLoaderClientWx::dispatchDidLoadMainResource(DocumentLoader*)
    374 {
    375     notImplemented();
    376 }
    377 
    378 
    379 void FrameLoaderClientWx::revertToProvisionalState(DocumentLoader*)
    380 {
    381     notImplemented();
    382 }
    383 
    384 void FrameLoaderClientWx::postProgressStartedNotification()
    385 {
    386     notImplemented();
    387 }
    388 
    389 void FrameLoaderClientWx::postProgressEstimateChangedNotification()
    390 {
    391     notImplemented();
    392 }
    393 
    394 void FrameLoaderClientWx::postProgressFinishedNotification()
    395 {
    396     if (m_webView) {
    397         wxWebViewLoadEvent wkEvent(m_webView);
    398         wkEvent.SetState(wxWEBVIEW_LOAD_DL_COMPLETED);
    399         wkEvent.SetURL(m_frame->document()->url().string());
    400         m_webView->GetEventHandler()->ProcessEvent(wkEvent);
    401     }
    402 }
    403 
    404 void FrameLoaderClientWx::progressStarted()
    405 {
    406     notImplemented();
    407 }
    408 
    409 
    410 void FrameLoaderClientWx::progressCompleted()
    411 {
    412     notImplemented();
    413 }
    414 
    415 
    416 void FrameLoaderClientWx::setMainFrameDocumentReady(bool b)
    417 {
    418     notImplemented();
    419     // this is only interesting once we provide an external API for the DOM
    420 }
    421 
    422 
    423 void FrameLoaderClientWx::willChangeTitle(DocumentLoader*)
    424 {
    425     notImplemented();
    426 }
    427 
    428 
    429 void FrameLoaderClientWx::didChangeTitle(DocumentLoader *l)
    430 {
    431     setTitle(l->title(), l->url());
    432 }
    433 
    434 
    435 void FrameLoaderClientWx::finishedLoading(DocumentLoader* loader)
    436 {
    437     if (!m_pluginView) {
    438         if (m_firstData) {
    439             loader->writer()->setEncoding(m_response.textEncodingName(), false);
    440             m_firstData = false;
    441         }
    442     } else {
    443         m_pluginView->didFinishLoading();
    444         m_pluginView = 0;
    445         m_hasSentResponseToPlugin = false;
    446     }
    447 }
    448 
    449 bool FrameLoaderClientWx::canShowMIMETypeAsHTML(const String& MIMEType) const
    450 {
    451     notImplemented();
    452     return true;
    453 }
    454 
    455 
    456 bool FrameLoaderClientWx::canShowMIMEType(const String& MIMEType) const
    457 {
    458     notImplemented();
    459     return true;
    460 }
    461 
    462 
    463 bool FrameLoaderClientWx::representationExistsForURLScheme(const String& URLScheme) const
    464 {
    465     notImplemented();
    466     return false;
    467 }
    468 
    469 
    470 String FrameLoaderClientWx::generatedMIMETypeForURLScheme(const String& URLScheme) const
    471 {
    472     notImplemented();
    473     return String();
    474 }
    475 
    476 
    477 void FrameLoaderClientWx::frameLoadCompleted()
    478 {
    479     notImplemented();
    480 }
    481 
    482 void FrameLoaderClientWx::saveViewStateToItem(HistoryItem*)
    483 {
    484     notImplemented();
    485 }
    486 
    487 void FrameLoaderClientWx::restoreViewState()
    488 {
    489     notImplemented();
    490 }
    491 
    492 void FrameLoaderClientWx::restoreScrollPositionAndViewState()
    493 {
    494     notImplemented();
    495 }
    496 
    497 
    498 void FrameLoaderClientWx::provisionalLoadStarted()
    499 {
    500     notImplemented();
    501 }
    502 
    503 
    504 bool FrameLoaderClientWx::shouldTreatURLAsSameAsCurrent(const KURL&) const
    505 {
    506     notImplemented();
    507     return false;
    508 }
    509 
    510 
    511 void FrameLoaderClientWx::addHistoryItemForFragmentScroll()
    512 {
    513     notImplemented();
    514 }
    515 
    516 
    517 void FrameLoaderClientWx::didFinishLoad()
    518 {
    519     notImplemented();
    520 }
    521 
    522 
    523 void FrameLoaderClientWx::prepareForDataSourceReplacement()
    524 {
    525     notImplemented();
    526 }
    527 
    528 
    529 void FrameLoaderClientWx::setTitle(const StringWithDirection& title, const KURL&)
    530 {
    531     notImplemented();
    532 }
    533 
    534 
    535 String FrameLoaderClientWx::userAgent(const KURL&)
    536 {
    537     // FIXME: Use the new APIs introduced by the GTK port to fill in these values.
    538     return String("Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/418.9.1 (KHTML, like Gecko) Safari/419.3");
    539 }
    540 
    541 void FrameLoaderClientWx::dispatchDidReceiveIcon()
    542 {
    543     notImplemented();
    544 }
    545 
    546 void FrameLoaderClientWx::frameLoaderDestroyed()
    547 {
    548     if (m_webFrame)
    549         delete m_webFrame;
    550     m_webFrame = 0;
    551     m_frame = 0;
    552     delete this;
    553 }
    554 
    555 bool FrameLoaderClientWx::canHandleRequest(const WebCore::ResourceRequest&) const
    556 {
    557     notImplemented();
    558     return true;
    559 }
    560 
    561 void FrameLoaderClientWx::partClearedInBegin()
    562 {
    563     notImplemented();
    564 }
    565 
    566 void FrameLoaderClientWx::updateGlobalHistory()
    567 {
    568     notImplemented();
    569 }
    570 
    571 void FrameLoaderClientWx::updateGlobalHistoryRedirectLinks()
    572 {
    573     notImplemented();
    574 }
    575 
    576 bool FrameLoaderClientWx::shouldGoToHistoryItem(WebCore::HistoryItem*) const
    577 {
    578     notImplemented();
    579     return true;
    580 }
    581 
    582 bool FrameLoaderClientWx::shouldStopLoadingForHistoryItem(WebCore::HistoryItem*) const
    583 {
    584     return true;
    585 }
    586 
    587 void FrameLoaderClientWx::dispatchDidAddBackForwardItem(WebCore::HistoryItem*) const
    588 {
    589 }
    590 
    591 void FrameLoaderClientWx::dispatchDidRemoveBackForwardItem(WebCore::HistoryItem*) const
    592 {
    593 }
    594 
    595 void FrameLoaderClientWx::dispatchDidChangeBackForwardIndex() const
    596 {
    597 }
    598 
    599 void FrameLoaderClientWx::didDisplayInsecureContent()
    600 {
    601     notImplemented();
    602 }
    603 
    604 void FrameLoaderClientWx::didRunInsecureContent(WebCore::SecurityOrigin*, const KURL&)
    605 {
    606     notImplemented();
    607 }
    608 
    609 void FrameLoaderClientWx::saveScrollPositionAndViewStateToItem(WebCore::HistoryItem*)
    610 {
    611     notImplemented();
    612 }
    613 
    614 bool FrameLoaderClientWx::canCachePage() const
    615 {
    616     return false;
    617 }
    618 
    619 void FrameLoaderClientWx::setMainDocumentError(WebCore::DocumentLoader* loader, const WebCore::ResourceError&)
    620 {
    621     if (m_firstData) {
    622         loader->writer()->setEncoding(m_response.textEncodingName(), false);
    623         m_firstData = false;
    624     }
    625 }
    626 
    627 // FIXME: This function should be moved into WebCore.
    628 void FrameLoaderClientWx::committedLoad(WebCore::DocumentLoader* loader, const char* data, int length)
    629 {
    630     if (!m_webFrame)
    631         return;
    632     if (!m_pluginView)
    633         loader->commitData(data, length);
    634 
    635     // We re-check here as the plugin can have been created
    636     if (m_pluginView) {
    637         if (!m_hasSentResponseToPlugin) {
    638             m_pluginView->didReceiveResponse(loader->response());
    639             // didReceiveResponse sets up a new stream to the plug-in. on a full-page plug-in, a failure in
    640             // setting up this stream can cause the main document load to be cancelled, setting m_pluginView
    641             // to null
    642             if (!m_pluginView)
    643                 return;
    644             m_hasSentResponseToPlugin = true;
    645         }
    646         m_pluginView->didReceiveData(data, length);
    647     }
    648 }
    649 
    650 WebCore::ResourceError FrameLoaderClientWx::cancelledError(const WebCore::ResourceRequest& request)
    651 {
    652     notImplemented();
    653     return ResourceError(String(), WebKitErrorCannotShowURL, request.url().string(), String());
    654 }
    655 
    656 WebCore::ResourceError FrameLoaderClientWx::blockedError(const ResourceRequest& request)
    657 {
    658     notImplemented();
    659     return ResourceError(String(), WebKitErrorCannotShowURL, request.url().string(), String());
    660 }
    661 
    662 WebCore::ResourceError FrameLoaderClientWx::cannotShowURLError(const WebCore::ResourceRequest& request)
    663 {
    664     return ResourceError(String(), WebKitErrorCannotShowURL, request.url().string(), String());
    665 }
    666 
    667 WebCore::ResourceError FrameLoaderClientWx::interruptForPolicyChangeError(const WebCore::ResourceRequest& request)
    668 {
    669     notImplemented();
    670     return ResourceError(String(), WebKitErrorFrameLoadInterruptedByPolicyChange, request.url().string(), String());
    671 }
    672 
    673 WebCore::ResourceError FrameLoaderClientWx::cannotShowMIMETypeError(const WebCore::ResourceResponse& response)
    674 {
    675     notImplemented();
    676     return ResourceError(String(), WebKitErrorCannotShowMIMEType, response.url().string(), String());
    677 }
    678 
    679 WebCore::ResourceError FrameLoaderClientWx::fileDoesNotExistError(const WebCore::ResourceResponse& response)
    680 {
    681     notImplemented();
    682     return ResourceError(String(), WebKitErrorCannotShowURL, response.url().string(), String());
    683 }
    684 
    685 bool FrameLoaderClientWx::shouldFallBack(const WebCore::ResourceError& error)
    686 {
    687     notImplemented();
    688     return false;
    689 }
    690 
    691 WTF::PassRefPtr<DocumentLoader> FrameLoaderClientWx::createDocumentLoader(const ResourceRequest& request, const SubstituteData& substituteData)
    692 {
    693     return DocumentLoader::create(request, substituteData);
    694 }
    695 
    696 void FrameLoaderClientWx::download(ResourceHandle*, const ResourceRequest&, const ResourceRequest&, const ResourceResponse&)
    697 {
    698     notImplemented();
    699 }
    700 
    701 void FrameLoaderClientWx::assignIdentifierToInitialRequest(unsigned long identifier, DocumentLoader*, const ResourceRequest&)
    702 {
    703     notImplemented();
    704 }
    705 
    706 void FrameLoaderClientWx::dispatchWillSendRequest(DocumentLoader*, unsigned long, ResourceRequest& request, const ResourceResponse& response)
    707 {
    708     notImplemented();
    709 }
    710 
    711 bool FrameLoaderClientWx::shouldUseCredentialStorage(DocumentLoader*, unsigned long)
    712 {
    713     notImplemented();
    714     return false;
    715 }
    716 
    717 void FrameLoaderClientWx::dispatchDidReceiveAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
    718 {
    719     notImplemented();
    720 }
    721 
    722 void FrameLoaderClientWx::dispatchDidCancelAuthenticationChallenge(DocumentLoader*, unsigned long, const AuthenticationChallenge&)
    723 {
    724     notImplemented();
    725 }
    726 
    727 void FrameLoaderClientWx::dispatchDidReceiveResponse(DocumentLoader* loader, unsigned long id, const ResourceResponse& response)
    728 {
    729     notImplemented();
    730     m_response = response;
    731     m_firstData = true;
    732 }
    733 
    734 void FrameLoaderClientWx::dispatchDidReceiveContentLength(DocumentLoader* loader, unsigned long id, int length)
    735 {
    736     notImplemented();
    737 }
    738 
    739 void FrameLoaderClientWx::dispatchDidFinishLoading(DocumentLoader*, unsigned long)
    740 {
    741     notImplemented();
    742 }
    743 
    744 void FrameLoaderClientWx::dispatchDidFailLoading(DocumentLoader* loader, unsigned long, const ResourceError&)
    745 {
    746     if (m_firstData) {
    747         loader->writer()->setEncoding(m_response.textEncodingName(), false);
    748         m_firstData = false;
    749     }
    750     if (m_webView) {
    751         wxWebViewLoadEvent wkEvent(m_webView);
    752         wkEvent.SetState(wxWEBVIEW_LOAD_FAILED);
    753         wkEvent.SetURL(m_frame->loader()->documentLoader()->request().url().string());
    754         m_webView->GetEventHandler()->ProcessEvent(wkEvent);
    755     }
    756 }
    757 
    758 bool FrameLoaderClientWx::dispatchDidLoadResourceFromMemoryCache(DocumentLoader*, const ResourceRequest&, const ResourceResponse&, int)
    759 {
    760     notImplemented();
    761     return false;
    762 }
    763 
    764 void FrameLoaderClientWx::dispatchDidFailProvisionalLoad(const ResourceError&)
    765 {
    766     notImplemented();
    767 }
    768 
    769 void FrameLoaderClientWx::dispatchDidFailLoad(const ResourceError&)
    770 {
    771     notImplemented();
    772 }
    773 
    774 Frame* FrameLoaderClientWx::dispatchCreatePage(const NavigationAction&)
    775 {
    776     notImplemented();
    777     return false;
    778 }
    779 
    780 void FrameLoaderClientWx::dispatchDecidePolicyForResponse(FramePolicyFunction function, const ResourceResponse& response, const ResourceRequest& request)
    781 {
    782     if (!m_webFrame)
    783         return;
    784 
    785     notImplemented();
    786     (m_frame->loader()->policyChecker()->*function)(PolicyUse);
    787 }
    788 
    789 void FrameLoaderClientWx::dispatchDecidePolicyForNewWindowAction(FramePolicyFunction function, const NavigationAction&, const ResourceRequest& request, PassRefPtr<FormState>, const String& targetName)
    790 {
    791     if (!m_webFrame)
    792         return;
    793 
    794     if (m_webView) {
    795         wxWebViewNewWindowEvent wkEvent(m_webView);
    796         wkEvent.SetURL(request.url().string());
    797         wkEvent.SetTargetName(targetName);
    798         if (m_webView->GetEventHandler()->ProcessEvent(wkEvent)) {
    799             // if the app handles and doesn't skip the event,
    800             // from WebKit's perspective treat it as blocked / ignored
    801             (m_frame->loader()->policyChecker()->*function)(PolicyIgnore);
    802             return;
    803         }
    804     }
    805 
    806     (m_frame->loader()->policyChecker()->*function)(PolicyUse);
    807 }
    808 
    809 void FrameLoaderClientWx::dispatchDecidePolicyForNavigationAction(FramePolicyFunction function, const NavigationAction& action, const ResourceRequest& request, PassRefPtr<FormState>)
    810 {
    811     if (!m_webFrame)
    812         return;
    813 
    814     if (m_webView) {
    815         wxWebViewBeforeLoadEvent wkEvent(m_webView);
    816         wkEvent.SetNavigationType(wxNavTypeFromWebNavType(action.type()));
    817         wkEvent.SetURL(request.url().string());
    818 
    819         m_webView->GetEventHandler()->ProcessEvent(wkEvent);
    820         if (wkEvent.IsCancelled())
    821             (m_frame->loader()->policyChecker()->*function)(PolicyIgnore);
    822         else
    823             (m_frame->loader()->policyChecker()->*function)(PolicyUse);
    824 
    825     }
    826 }
    827 
    828 void FrameLoaderClientWx::dispatchUnableToImplementPolicy(const ResourceError&)
    829 {
    830     notImplemented();
    831 }
    832 
    833 void FrameLoaderClientWx::startDownload(const ResourceRequest&)
    834 {
    835     notImplemented();
    836 }
    837 
    838 PassRefPtr<Frame> FrameLoaderClientWx::createFrame(const KURL& url, const String& name, HTMLFrameOwnerElement* ownerElement,
    839                                    const String& referrer, bool allowsScrolling, int marginWidth, int marginHeight)
    840 {
    841     WebViewFrameData* data = new WebViewFrameData();
    842     data->name = name;
    843     data->ownerElement = ownerElement;
    844     data->url = url;
    845     data->referrer = referrer;
    846     data->allowsScrolling = allowsScrolling;
    847     data->marginWidth = marginWidth;
    848     data->marginHeight = marginHeight;
    849 
    850     wxWebFrame* newFrame = new wxWebFrame(m_webView, m_webFrame, data);
    851 
    852     RefPtr<Frame> childFrame = adoptRef(newFrame->m_impl->frame);
    853 
    854     // The creation of the frame may have run arbitrary JavaScript that removed it from the page already.
    855     if (!childFrame->page())
    856         return 0;
    857 
    858     m_frame->loader()->loadURLIntoChildFrame(url, referrer, childFrame.get());
    859 
    860     // The frame's onload handler may have removed it from the document.
    861     if (!childFrame->tree()->parent())
    862         return 0;
    863 
    864     return childFrame.release();
    865 }
    866 
    867 void FrameLoaderClientWx::didTransferChildFrameToNewDocument(Page*)
    868 {
    869 }
    870 
    871 void FrameLoaderClientWx::transferLoadingResourceFromPage(unsigned long, DocumentLoader*, const ResourceRequest&, Page*)
    872 {
    873 }
    874 
    875 ObjectContentType FrameLoaderClientWx::objectContentType(const KURL& url, const String& mimeType, bool shouldPreferPlugInsForImages)
    876 {
    877     notImplemented();
    878     return ObjectContentType();
    879 }
    880 
    881 PassRefPtr<Widget> FrameLoaderClientWx::createPlugin(const IntSize& size, HTMLPlugInElement* element, const KURL& url, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually)
    882 {
    883 #if __WXMSW__ || __WXMAC__
    884     RefPtr<PluginView> pv = PluginView::create(m_frame, size, element, url, paramNames, paramValues, mimeType, loadManually);
    885     if (pv->status() == PluginStatusLoadedSuccessfully)
    886         return pv;
    887 #endif
    888     return 0;
    889 }
    890 
    891 void FrameLoaderClientWx::redirectDataToPlugin(Widget* pluginWidget)
    892 {
    893     ASSERT(!m_pluginView);
    894     m_pluginView = static_cast<PluginView*>(pluginWidget);
    895     m_hasSentResponseToPlugin = false;
    896 }
    897 
    898 ResourceError FrameLoaderClientWx::pluginWillHandleLoadError(const ResourceResponse& response)
    899 {
    900     notImplemented();
    901     return ResourceError(String(), WebKitErrorCannotLoadPlugIn, response.url().string(), String());
    902 }
    903 
    904 PassRefPtr<Widget> FrameLoaderClientWx::createJavaAppletWidget(const IntSize&, HTMLAppletElement*, const KURL& baseURL,
    905                                                     const Vector<String>& paramNames, const Vector<String>& paramValues)
    906 {
    907     notImplemented();
    908     return 0;
    909 }
    910 
    911 String FrameLoaderClientWx::overrideMediaType() const
    912 {
    913     notImplemented();
    914     return String();
    915 }
    916 
    917 void FrameLoaderClientWx::dispatchDidClearWindowObjectInWorld(DOMWrapperWorld* world)
    918 {
    919     if (world != mainThreadNormalWorld())
    920         return;
    921 
    922     if (m_webView) {
    923         wxWebViewWindowObjectClearedEvent wkEvent(m_webView);
    924         Frame* coreFrame = m_webView->GetMainFrame()->GetFrame();
    925         JSGlobalContextRef context = toGlobalRef(coreFrame->script()->globalObject(mainThreadNormalWorld())->globalExec());
    926         JSObjectRef windowObject = toRef(coreFrame->script()->globalObject(mainThreadNormalWorld()));
    927         wkEvent.SetJSContext(context);
    928         wkEvent.SetWindowObject(windowObject);
    929         m_webView->GetEventHandler()->ProcessEvent(wkEvent);
    930     }
    931 }
    932 
    933 void FrameLoaderClientWx::documentElementAvailable()
    934 {
    935 }
    936 
    937 void FrameLoaderClientWx::didPerformFirstNavigation() const
    938 {
    939     notImplemented();
    940 }
    941 
    942 void FrameLoaderClientWx::registerForIconNotification(bool listen)
    943 {
    944     notImplemented();
    945 }
    946 
    947 void FrameLoaderClientWx::savePlatformDataToCachedFrame(CachedFrame*)
    948 {
    949     notImplemented();
    950 }
    951 
    952 void FrameLoaderClientWx::transitionToCommittedFromCachedFrame(CachedFrame*)
    953 {
    954     notImplemented();
    955 }
    956 
    957 void FrameLoaderClientWx::transitionToCommittedForNewPage()
    958 {
    959     ASSERT(m_webFrame);
    960     ASSERT(m_frame);
    961     ASSERT(m_webView);
    962 
    963     IntSize size = IntRect(m_webView->GetRect()).size();
    964     // FIXME: This value should be gotten from m_webView->IsTransparent();
    965     // but transitionToCommittedForNewPage() can be called while m_webView is
    966     // still being initialized.
    967     bool transparent = false;
    968     Color backgroundColor = transparent ? WebCore::Color::transparent : WebCore::Color::white;
    969 
    970     if (m_frame)
    971         m_frame->createView(size, backgroundColor, transparent, IntSize(), false);
    972 }
    973 
    974 void FrameLoaderClientWx::didSaveToPageCache()
    975 {
    976 }
    977 
    978 void FrameLoaderClientWx::didRestoreFromPageCache()
    979 {
    980 }
    981 
    982 void FrameLoaderClientWx::dispatchDidBecomeFrameset(bool)
    983 {
    984 }
    985 
    986 bool FrameLoaderClientWx::shouldUsePluginDocument(const String &mimeType) const
    987 {
    988     // NOTE: Plugin Documents are used for viewing PDFs, etc. inline, and should
    989     // not be used for pages with plugins in them.
    990     return false;
    991 }
    992 
    993 PassRefPtr<FrameNetworkingContext> FrameLoaderClientWx::createNetworkingContext()
    994 {
    995     return FrameNetworkingContextWx::create(m_frame);
    996 }
    997 
    998 }
    999