--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/browser/src/BrCtlApiTestObserver.cpp Thu Jan 21 14:54:07 2010 +0000
@@ -0,0 +1,530 @@
+/*
+* 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: BrCtlApiTest
+*
+*/
+
+// INCLUDE FILES
+#include <apmrec.h>
+#include <apgcli.h>
+#include <eikappui.h>
+#include <eikenv.h>
+#include <eikbtgpc.h>
+#include "BrCtlApiTestObserver.h"
+#include <avkon.hrh>
+#include <aknmessagequerydialog.h>
+
+#ifndef RD_PF_SEC_APPARC
+//#include <genericparam.h>
+#else
+#include "AiwGenericParam.h"
+#endif
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::UpdateBrowserVScrollBarL
+// ---------------------------------------------------------
+//
+void CBrCtlApiTestObserver::UpdateBrowserVScrollBarL(TInt /* aDocumentHeight */,
+ TInt /* aDisplayHeight */,
+ TInt /* aDisplayPosY */ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::UpdateBrowserHScrollBarL
+// ---------------------------------------------------------
+//
+void CBrCtlApiTestObserver::UpdateBrowserHScrollBarL(TInt /* aDocumentWidth */,
+ TInt /* aDisplayWidth */,
+ TInt /* aDisplayPosX */ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::NotifyLayoutChange
+// ---------------------------------------------------------
+//
+void CBrCtlApiTestObserver::NotifyLayoutChange( TBrCtlLayout /* aNewLayout */)
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrCtlSampleAppLayoutObserver::UpdateTitle
+// ---------------------------------------------------------
+//
+void CBrCtlApiTestObserver::UpdateTitleL( const TDesC& /*aTitle*/ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::UpdateSoftkeyL
+// ---------------------------------------------------------
+//
+void CBrCtlApiTestObserver::UpdateSoftkeyL(TBrCtlKeySoftkey /* aKeySoftkey */,
+ const TDesC& /* aLabel */,
+ TUint32 /* aCommandId */,
+ TBrCtlSoftkeyChangeReason /* aBrCtlSoftkeyChangeReason */)
+ {
+ return;
+ }
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::NetworkConnectionNeededL
+// ---------------------------------------------------------
+//
+void CBrCtlApiTestObserver::NetworkConnectionNeededL(TInt* /*aConnectionPtr*/,
+ TInt* /*aSockSvrHandle*/,
+ TBool* /*aNewConn*/,
+ TApBearerType* /*aBearerType*/)
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::HandleRequestL
+// ---------------------------------------------------------
+//
+TBool CBrCtlApiTestObserver::HandleRequestL(RArray<TUint>* aTypeArray, CDesCArrayFlat* aDesArray)
+ {
+
+ TInt i;
+
+ // The 2 arrays must be in sync. Each element in iTypeArray
+ // identifies the type of the corresponding element in iDesArray.
+ if( aTypeArray->Count() != aDesArray->Count() )
+ {
+ User::Leave( KErrArgument );
+ }
+
+ // get url
+ HBufC* url = NULL;
+ // Serach url in the param list
+ for(i = 0; i < aTypeArray->Count(); i++)
+ {
+ if( (*aTypeArray)[i] == EParamRequestUrl )
+ {
+ // the url is found
+ url = HBufC::NewLC( (*aDesArray)[i].Length() );
+ url->Des().Copy( (*aDesArray)[i] );
+ break;
+ }
+ }
+ if( !url )
+ {
+ // The url wasn't found.
+ User::Leave( KErrArgument );
+ }
+
+ // get referrer header
+ HBufC* refererHeader = NULL;
+ // Serach url in the param list
+ for( i = 0; i < aTypeArray->Count(); i++ )
+ {
+ if( (*aTypeArray)[i] == EParamRefererHeader )
+ {
+ // the referer Header is found
+ refererHeader = HBufC::NewLC( (*aDesArray)[i].Length() );
+ refererHeader->Des().Copy( (*aDesArray)[i] );
+ break;
+ }
+ }
+
+ if( refererHeader )
+ {
+ CleanupStack::PopAndDestroy( 1 ); // refererHeader
+ }
+
+ CleanupStack::PopAndDestroy( 1 ); // url
+
+ return ETrue;
+ }
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::HandleDownloadL
+// ---------------------------------------------------------
+//
+TBool CBrCtlApiTestObserver::HandleDownloadL(RArray<TUint>* aTypeArray, CDesCArrayFlat* aDesArray)
+ {
+ TInt i = 0;
+ TInt count = aTypeArray->Count();
+ for (i = 0; i < count; i++)
+ {
+ if ((*aTypeArray)[i] == EParamLocalFileName && aDesArray[i].Length() > 0)
+ {
+ TInt j = 0;
+ for (j = 0; j < count; j++)
+ {
+ if ((*aTypeArray)[j] == EParamReceivedContentType)
+ {
+ HBufC8* dataType8 = HBufC8::NewLC((*aDesArray)[j].Length());
+ dataType8->Des().Copy((*aDesArray)[j]);
+ TDataType dataType(*dataType8);
+ iHandler->OpenFileEmbeddedL((*aDesArray)[i], dataType);
+ CleanupStack::PopAndDestroy();
+ break;
+ }
+ }
+ break;
+ }
+ }
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::HandleBrowserLoadEventL
+// ---------------------------------------------------------
+//
+void CBrCtlApiTestObserver::HandleBrowserLoadEventL( TBrCtlDefs::TBrCtlLoadEvent /* aLoadEvent */,
+ TUint /* aSize */, TUint16 /* aTransactionId */ )
+ {
+ }
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::ResolveEmbeddedLinkL
+// ---------------------------------------------------------
+//
+TBool CBrCtlApiTestObserver::ResolveEmbeddedLinkL(const TDesC& aEmbeddedUrl,
+ const TDesC& /* aCurrentUrl */,
+ TBrCtlLoadContentType /* aLoadContentType */,
+ MBrCtlLinkContent& aEmbeddedLinkContent)
+ {
+ if (IsFileScheme(aEmbeddedUrl))
+ {
+ GetFileNameL(aEmbeddedUrl);
+ HBufC8* buf = ReadFileLC(*iFileName);
+ HBufC* contentType = NULL;
+ TPtrC p(NULL, 0);
+ contentType = RecognizeLC(*iFileName, *buf);
+ aEmbeddedLinkContent.HandleResolveComplete(*contentType, p, buf);
+ CleanupStack::PopAndDestroy(2); // contentType, buf
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::ResolveLinkL
+// ---------------------------------------------------------
+//
+TBool CBrCtlApiTestObserver::ResolveLinkL(const TDesC& aUrl, const TDesC& /* aCurrentUrl */,
+ MBrCtlLinkContent& aBrCtlLinkContent)
+ {
+ if (IsFileScheme(aUrl))
+ {
+ GetFileNameL(aUrl);
+ HBufC8* buf = ReadFileLC(*iFileName);
+ HBufC* contentType = NULL;
+ TPtrC p(NULL, 0);
+ contentType = RecognizeLC(*iFileName, *buf);
+ aBrCtlLinkContent.HandleResolveComplete(*contentType, p, buf);
+ CleanupStack::PopAndDestroy(2); // contentType, buf
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::CancelAll
+// ---------------------------------------------------------
+//
+void CBrCtlApiTestObserver::CancelAll()
+ {
+ }
+
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::ConstructL
+// ---------------------------------------------------------
+//
+void CBrCtlApiTestObserver::ConstructL()
+ {
+ iHandler = CDocumentHandler::NewL(CEikonEnv::Static()->Process()) ;
+ }
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::~CBrCtlApiTestObserver
+// ---------------------------------------------------------
+//
+CBrCtlApiTestObserver::~CBrCtlApiTestObserver()
+ {
+ delete iFileName;
+ delete iHandler;
+ }
+
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::NewL
+// ---------------------------------------------------------
+//
+CBrCtlApiTestObserver* CBrCtlApiTestObserver::NewL()
+{
+ CBrCtlApiTestObserver* self = new(ELeave)CBrCtlApiTestObserver;
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+}
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::IsFileScheme
+// ---------------------------------------------------------
+//
+
+TBool CBrCtlApiTestObserver::IsFileScheme(const TDesC& aFileName)
+ {
+ _LIT(KFileScheme, "file://");
+ if (aFileName.Length() > 0 && aFileName.Ptr() != NULL)
+ {
+ if (aFileName.FindF(KFileScheme) == 0)
+ {
+ return ETrue;
+ }
+ }
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::ReadFile
+// ---------------------------------------------------------
+//
+HBufC8* CBrCtlApiTestObserver::ReadFileLC(const TDesC& aFileName)
+ {
+ RFs rfs;
+ RFile file;
+ User::LeaveIfError(rfs.Connect());
+ CleanupClosePushL(rfs);
+ User::LeaveIfError(file.Open(rfs, aFileName, EFileRead));
+ CleanupClosePushL(file);
+ TInt size;
+ User::LeaveIfError(file.Size(size));
+ HBufC8* buf = HBufC8::NewLC(size);
+ TPtr8 bufPtr(buf->Des());
+ User::LeaveIfError(file.Read(bufPtr));
+ CleanupStack::Pop(); // buf
+ CleanupStack::PopAndDestroy(2); // file, rfs
+ CleanupStack::PushL(buf);
+ return buf;
+ }
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::RecognizeL
+// ---------------------------------------------------------
+//
+HBufC* CBrCtlApiTestObserver::RecognizeLC(const TDesC& aFileName, const TDesC8& aData)
+ {
+ TDataRecognitionResult dataType;
+ RApaLsSession apaSession;
+ TInt ret;
+ HBufC* contentTypeString = NULL;
+
+ User::LeaveIfError(apaSession.Connect());
+ // Ask the application architecture to find the file type
+ ret = apaSession.RecognizeData(aFileName, aData, dataType);
+ apaSession.Close();
+
+ if (ret == KErrNone &&
+ (dataType.iConfidence == CApaDataRecognizerType::ECertain) ||
+ (dataType.iConfidence == CApaDataRecognizerType::EProbable))
+ {
+ // If the file type was found, try to match it to a known file type
+ TPtrC8 mimeTypePtr = dataType.iDataType.Des8();
+ TInt len = mimeTypePtr.Length() + 1;
+ contentTypeString = HBufC::NewL(len);
+ contentTypeString->Des().Copy(mimeTypePtr);
+ contentTypeString->Des().ZeroTerminate();
+ }
+ CleanupStack::PushL(contentTypeString);
+ return contentTypeString;
+ }
+
+// -----------------------------------------------------------------------------
+// CBrCtlApiTestObserver::GetFileNameL
+// Translate the file name from a URL to a valid file name in the system.
+// -----------------------------------------------------------------------------
+//
+TBool CBrCtlApiTestObserver::GetFileNameL(const TDesC& aFileName)
+ {
+ // This function accepts URLs in the following format:
+ // file://filename.xxx
+ // file:///filename.xxx
+ // file://c:/filename.xxx
+ // file:///c:/filename.xxx
+ //
+ _LIT(KFileScheme, "file://");
+ _LIT(KDefaultDrivePath, "C:\\");
+ _LIT(KPathChar, "\\");
+
+ TInt count;
+ TInt index = 0;
+ TBool drvLetter = EFalse;
+ TUint16 c;
+
+ // Verify the file scheme
+ TPtrC urlPtr(aFileName);
+ if (urlPtr.FindF(KFileScheme) != 0)
+ {
+ return EFalse;
+ }
+ urlPtr.Set(urlPtr.Mid(KFileScheme().Length()));
+
+ // make sure there are enough characters in the filename before
+ // trying to check them
+ count = urlPtr.Length();
+ if(count == 0)
+ {
+ return EFalse; // no filename, so can't look at urlPtr[0]
+ }
+
+ // Skip the first '/' if there is one
+ if (urlPtr[0] == '/')
+ {
+ urlPtr.Set(urlPtr.Mid(1));
+ }
+ count = urlPtr.Length();
+
+ // Is there a drive letter?
+ if(count > 1)
+ {
+ // can check for drive letter
+ if (urlPtr[1 + index] == ':')
+ {
+ drvLetter = ETrue;
+ }
+ }
+ if(drvLetter == EFalse)
+ {
+ // 3 additional characters for the string "c:\"
+ count = urlPtr.Length() + 3;
+ }
+ iFileName = HBufC::NewL(count);
+ if (!drvLetter)
+ {
+ iFileName->Des().Append(KDefaultDrivePath);
+ }
+
+ TBool fragment(EFalse);
+ // Convert relative path containing /./ and /../ to absolute path
+ for (; index < urlPtr.Length() && !fragment; index ++)
+ {
+ switch(urlPtr[index])
+ {
+ case '#': //Check if there is a fragment '#'
+ {
+ fragment = ETrue;
+ continue; // Just stop there
+ }
+
+ case '/':
+ {
+ iFileName->Des().Append(KPathChar);
+ break;
+ }
+ case '.':
+ {
+ if (index > 1 && urlPtr[index - 1] == '/')
+ {
+ if (index < count - 1 && urlPtr[index + 1] == '/')
+ {
+ index ++; // skip ./
+ break;
+ }
+ if (index > 2 && index < count - 3 &&
+ urlPtr[index + 1] == '.' && urlPtr[index + 2] == '/')
+ {
+ TInt i = index - 2;
+
+ for (; i > 0 && urlPtr[i] != '/'; i--) {} // skip /../
+
+ iFileName->Des().SetLength(iFileName->Des().Length() - (index - i));
+ index += 2;
+ break;
+ }
+ }
+ }
+ // no break
+ //lint -fallthrough
+
+ default:
+ {
+ c = urlPtr[index];
+ iFileName->Des().Append(&c, 1);
+ break;
+ }
+ } // end of switch
+ }
+ return ETrue;
+}
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::NewDownloadL
+// ---------------------------------------------------------
+//
+TBool CBrCtlApiTestObserver::NewDownloadL(TUint /* aTransactionID */,
+ const TDesC& /* aFileName */,
+ const TDesC& /* aContentType */,
+ const TDesC& /* aUrl */)
+{
+ return ETrue;
+}
+
+void CBrCtlApiTestObserver::ResumeDownloadL(TUint /* aTransactionID */,
+ TUint /* aLength */,
+ const TDesC& /* aFileName */,
+ const TDesC& /* aContentType */,
+ const TDesC& /* aUrl */)
+{
+}
+
+void CBrCtlApiTestObserver::HandleDownloadEventL( TUint /* aTransactionID */,
+ TBrCtlDownloadEvent /* aDownloadEvent */,
+ TUint /* aValue*/ )
+{
+}
+
+// Dummy function definitions for the functions from CBrCtlWindowObserver class - Added for Widget Extension Test
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::OpenWindowL
+// ---------------------------------------------------------
+//
+CBrCtlInterface* CBrCtlApiTestObserver::OpenWindowL(TDesC& aUrl, TDesC* aTargetName, TBool aUserInitiated,
+ TAny* aReserved)
+{
+
+}
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::FindWindowL
+// ---------------------------------------------------------
+//
+CBrCtlInterface* CBrCtlApiTestObserver::FindWindowL( const TDesC& aTargetName ) const
+{
+
+}
+
+// ---------------------------------------------------------
+// CBrCtlApiTestObserver::HandleWindowCommandL
+// ---------------------------------------------------------
+//
+void CBrCtlApiTestObserver::HandleWindowCommandL( const TDesC& aTargetName, TBrCtlWindowCommand aCommand )
+{
+
+}
+
+
+
+// End of File