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