browser/src/BrCtlApiTestObserver.cpp
branchSymbian3
changeset 3 235c00e46fb7
--- /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