diff -r 000000000000 -r dd21522fd290 webengine/osswebengine/WebKit/s60/webcoresupport/WebFrameBridge.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/webengine/osswebengine/WebKit/s60/webcoresupport/WebFrameBridge.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,200 @@ +/* +* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Implemetation of WebFrameBridge +* +*/ + +#include "config.h" +#include "../../bidi.h" +#include "Document.h" +#include "WebFrameBridge.h" +#include "WebView.h" +#include "WebFrame.h" +#include "WebFrameView.h" +#include "Frame.h" +#include "FrameLoader.h" +#include "FrameLoaderClient.h" +#include "WebFrameLoaderClient.h" +#include "FrameTree.h" +#include "HTMLFrameOwnerElement.h" +#include "Page.h" +#include "WebKitLogger.h" +#include "PluginSkin.h" +#include "BrCtl.h" +#include "HistoryInterface.h" +#include "Element.h" + +using namespace WebCore; + +WebFrameBridge::WebFrameBridge() : + m_refCount(1) +{ +} + +WebFrameBridge::~WebFrameBridge() +{ + m_webFrame.release(); +} + +WebView* WebFrameBridge::webView() const +{ + if (!m_frame) + return NULL; + + return kit(m_frame->page()); +} + +WebFrame* WebFrameBridge::webFrame() const +{ + return m_webFrame.get(); +} + +WebCoreFrameBridge* WebFrameBridge::mainFrame() const +{ + ASSERT(m_webFrame != NULL); + return webView()->mainFrame()->bridge(); +} + +MScrollView* WebFrameBridge::documentView() const +{ + ASSERT(m_webFrame != NULL); + return m_webFrame->frameView(); +} + +void WebFrameBridge::finishInitializingWithPage(Page* page, const String& frameName, + WebFrameView* frameView, HTMLFrameOwnerElement* ownerElement) +{ + WebView* webView = kit(page); + + m_webFrame = new WebFrame(); + m_webFrame->initWithWebFrameView(frameView, webView, this); + + m_frame = new Frame(page, ownerElement, new WebFrameLoaderClient(m_webFrame.get())); + m_frame->setBridge(this); + m_frame->tree()->setName(frameName); + m_frame->init(); +} + +void WebFrameBridge::initMainFrameWithPage(Page* page, const String& frameName, WebFrameView* frameView) +{ + init(); + finishInitializingWithPage(page, frameName, frameView, NULL); +} + +void WebFrameBridge::initSubframeWithOwnerElement(HTMLFrameOwnerElement* ownerElement, const String& frameName, WebFrameView* frameView) +{ + init(); + finishInitializingWithPage(ownerElement->document()->frame()->page(), frameName, frameView, ownerElement); +} + +void WebFrameBridge::close() +{ + WebCoreFrameBridge::close(); + m_webFrame.release(); + m_webFrame = NULL; +} + +Frame* WebFrameBridge::createChildFrameNamed(const String* frameName, const TPtrC8 withURL, const TPtrC referrer, + HTMLFrameOwnerElement* ownerElement, bool allowsScrolling, int marginWidth, int marginHeight) +{ + ASSERT(m_webFrame); + + WebFrameView* childView = new WebFrameView(); + childView->initWithFrame(TRect(0,0,0,0)); + childView->setAllowsScrolling(allowsScrolling); + childView->setMarginWidth(marginWidth); + childView->setMarginHeight(marginHeight); + + WebFrameBridge* newBridge = new WebFrameBridge(); + newBridge->initSubframeWithOwnerElement(ownerElement, *frameName, childView); + childView->deref(); + + m_webFrame->addChild(newBridge->webFrame()); + newBridge->deref(); + + RefPtr newFrame = newBridge->frame(); + +#if USE(LOW_BANDWIDTH_DISPLAY) + newFrame->loader()->setUseLowBandwidthDisplay(webView()->widgetExtension() != NULL); +#endif + + m_webFrame->loadURL(withURL, referrer, kit(newFrame.get())); + + // The frame's onload handler may have removed it from the document. + if (!newFrame->tree()->parent()) + return NULL; + + return newFrame.get(); +} + +ObjectElementType WebFrameBridge::determineObjectFromMIMEType(const String& MIMEType, const TPtrC8 URL) +{ + if (MIMEType.length() == 0) { + // Try to guess the MIME type based off the extension. + int index = MIMEType.des().LocateReverse('.'); + if (index != KErrNotFound) { + TPtrC extPtr = MIMEType.des().Mid(++index); + if (extPtr.Length() > 0 && webView()->pluginForExtension(String(extPtr))) + // If no MIME type is specified, use a plug-in if we have one that can handle the extension. + return ObjectElementPlugin; + } + } + + if (MIMEType.length() == 0) + return ObjectElementFrame; // Go ahead and hope that we can display the content. + + //if (MimeTypeRegistry::isSupportedImageMIMEType(MIMEType)) + // return ObjectElementImage; + + if (webView()->isMIMETypeRegisteredAsPlugin(MIMEType)) + return ObjectElementPlugin; + + if (WebFrameView::viewClassForMIMEType(MIMEType)) + return ObjectElementFrame; + + return ObjectElementNone; +} + +void WebFrameBridge::notifyMetaData(String& name, String& value) +{ + webView()->notifyMetaData(name, value); +} + +unsigned WebFrameBridge::getHistoryLength() +{ + return (unsigned)webView()->brCtl()->historyHandler()->historyController()->historyLength(); +} + +void WebFrameBridge::scheduleHistoryNavigation(int distance) +{ + webView()->brCtl()->historyHandler()->historyController()->goBackOrForward(distance); +} + +MWebCoreWidget* WebFrameBridge::viewForPluginWithURL( const TPtrC8& url, const Vector& paramNames, const Vector& paramValues, + const TPtrC8& baseUrl, const String& mimeType, TBool loadContent, Element* pluginElement ) +{ + /*tot:fixme TBool hideReferrer; + if (!CanLoadUrl(aUrl,iWebCoreBridge->Referrer(),hideReferrer)) + { + return 0; + }*/ + PluginSkin* pluginSkin = NULL; + //tot: need to fix url convert + TRAP_IGNORE( pluginSkin = PluginSkin::NewL( *m_webFrame, + url, paramNames, paramValues, baseUrl, mimeType, loadContent ) ); + pluginSkin->setElement(pluginElement); + return pluginSkin; +} + +// end of file