browserui/browser/Launcher2/src/BrowserLauncher.cpp
branchRCL_3
changeset 65 8e6fa1719340
equal deleted inserted replaced
64:6385c4c93049 65:8e6fa1719340
       
     1 /*
       
     2 * Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  BrowserLauncher
       
    15 *
       
    16 */
       
    17 
       
    18 // INCLUDE FILES
       
    19 #include <browserlauncher.h>
       
    20 #include "BrowserLauncherExtension.h"
       
    21 #include "logger.h"
       
    22 #include "BrowserUiPrivateCRKeys.h"
       
    23 #include <browseroverriddensettings.h>
       
    24 #include "Browser.hrh"
       
    25 
       
    26 #include <favouriteslimits.h> // Context Id:s
       
    27 #include <eikappui.h>
       
    28 #include <eikapp.h>
       
    29 #include <eikenv.h>
       
    30 #include <centralrepository.h>
       
    31 #include <favouritesdb.h>
       
    32 #include <SysUtil.h>
       
    33 
       
    34 // CONSTANTS
       
    35 const TInt KBrowserAppUid = 0x10008D39;
       
    36 const TInt KBrowserSeamlessParamLength = 20;
       
    37 _LIT( KBookmarkStarterString, "1 " );
       
    38 const TInt KMinimumCDriveDiskSpace = 512 * 1024;
       
    39 
       
    40 // ============================ MEMBER FUNCTIONS ===============================
       
    41 
       
    42 // -----------------------------------------------------------------------------
       
    43 // CBrowserLauncher::CBrowserLauncher
       
    44 // -----------------------------------------------------------------------------
       
    45 //
       
    46 CBrowserLauncher::CBrowserLauncher()
       
    47     {
       
    48     iBrowserUid = TUid::Uid( KBrowserAppUid );
       
    49     }
       
    50     
       
    51 // -----------------------------------------------------------------------------
       
    52 // CBrowserLauncher::ConstructL
       
    53 // -----------------------------------------------------------------------------
       
    54 //
       
    55 void CBrowserLauncher::ConstructL()
       
    56     {
       
    57     LOG_CREATE;
       
    58     LOG_ENTERFN( "CBrowserLauncher::ConstructL" );
       
    59     }
       
    60 
       
    61 // -----------------------------------------------------------------------------
       
    62 // CBrowserLauncher::NewLC
       
    63 // -----------------------------------------------------------------------------
       
    64 //
       
    65 EXPORT_C 
       
    66 CBrowserLauncher* CBrowserLauncher::NewLC()
       
    67     {
       
    68     LOG_ENTERFN( "CBrowserLauncher::NewLC" );
       
    69     CBrowserLauncher* self = new(ELeave) CBrowserLauncher();
       
    70     CleanupStack::PushL(self);
       
    71     self->ConstructL();
       
    72     return self;
       
    73     }
       
    74 
       
    75 // -----------------------------------------------------------------------------
       
    76 // CBrowserLauncher::NewL
       
    77 // -----------------------------------------------------------------------------
       
    78 //
       
    79 EXPORT_C 
       
    80 CBrowserLauncher* CBrowserLauncher::NewL()
       
    81     {
       
    82     LOG_ENTERFN( "CBrowserLauncher::NewL" );
       
    83     CBrowserLauncher* self = NewLC();
       
    84     CleanupStack::Pop();
       
    85     return self;
       
    86     }
       
    87 
       
    88 // -----------------------------------------------------------------------------
       
    89 // CBrowserLauncher::NewLC
       
    90 // -----------------------------------------------------------------------------
       
    91 //
       
    92 EXPORT_C 
       
    93 CBrowserLauncher* CBrowserLauncher::NewLC( TInt /*aOverrideBrowserUid*/ )
       
    94     {
       
    95     LOG_ENTERFN( "CBrowserLauncher::NewLC(TInt aOverrideBrowserUid) IS DEPRECATED" );
       
    96     CBrowserLauncher* self = new(ELeave) CBrowserLauncher();
       
    97     CleanupStack::PushL(self);
       
    98     self->ConstructL();
       
    99     return self;	
       
   100 	}
       
   101 	
       
   102 // -----------------------------------------------------------------------------
       
   103 // CBrowserLauncher::NewL
       
   104 // -----------------------------------------------------------------------------
       
   105 //
       
   106 EXPORT_C
       
   107 CBrowserLauncher* CBrowserLauncher::NewL( TInt /*aOverrideBrowserUid*/ )
       
   108     {
       
   109     LOG_ENTERFN( "CBrowserLauncher::NewL(TInt aOverrideBrowserUid) IS DEPRECATED" );
       
   110     CBrowserLauncher* self = NewLC();
       
   111     CleanupStack::Pop();
       
   112     return self;	
       
   113     }
       
   114 	
       
   115 // Destructor
       
   116 EXPORT_C 
       
   117 CBrowserLauncher::~CBrowserLauncher()
       
   118     {
       
   119     LOG_ENTERFN( "CBrowserLauncher::~CBrowserLauncher" );
       
   120     Cancel();
       
   121     }
       
   122 
       
   123 // ----------------------------------------------------------------------------
       
   124 // CBrowserLauncher::LaunchBrowserEmbeddedL
       
   125 // ----------------------------------------------------------------------------
       
   126 //
       
   127 EXPORT_C 
       
   128 void CBrowserLauncher::LaunchBrowserEmbeddedL
       
   129                       ( const TDesC& aParams, 
       
   130                         MDownloadedContentHandler* aContentHandler, 
       
   131                         MAknServerAppExitObserver* aExitObserver, 
       
   132                         TBrowserOverriddenSettings* aSettings )
       
   133     {
       
   134     LaunchBrowserEmbeddedL
       
   135                       ( aParams, 
       
   136                         /*aContextId*/KErrNotFound, 
       
   137                         aContentHandler, 
       
   138                         aExitObserver, 
       
   139                         aSettings );
       
   140     }
       
   141 
       
   142 // ----------------------------------------------------------------------------
       
   143 // CBrowserLauncher::LaunchBrowserEmbeddedL
       
   144 // ----------------------------------------------------------------------------
       
   145 //
       
   146 EXPORT_C 
       
   147 void CBrowserLauncher::LaunchBrowserEmbeddedL
       
   148                       ( TInt aContextId, 
       
   149                         MDownloadedContentHandler* aContentHandler, 
       
   150                         MAknServerAppExitObserver* aExitObserver, 
       
   151                         TBrowserOverriddenSettings* aSettings )
       
   152     {
       
   153     LaunchBrowserEmbeddedL
       
   154                       ( /*aParams*/KNullDesC, 
       
   155                         aContextId, 
       
   156                         aContentHandler, 
       
   157                         aExitObserver, 
       
   158                         aSettings );
       
   159     }
       
   160 
       
   161 // ----------------------------------------------------------------------------
       
   162 // CBrowserLauncher::LaunchBrowserSyncEmbeddedL
       
   163 // ----------------------------------------------------------------------------
       
   164 //
       
   165 EXPORT_C 
       
   166 TInt CBrowserLauncher::LaunchBrowserSyncEmbeddedL
       
   167                       ( const TDesC& aParams, 
       
   168                         MDownloadedContentHandler* aContentHandler, 
       
   169                         TBrowserOverriddenSettings* aSettings )
       
   170     {
       
   171     LaunchBrowserEmbeddedL
       
   172                       ( aParams, 
       
   173                         /*aContextId*/KErrNotFound, 
       
   174                         aContentHandler, 
       
   175                         /*aExitObserver*/0, 
       
   176                         aSettings );
       
   177 
       
   178     return (iExtension->WaitBrowserToFinish());
       
   179     }
       
   180 
       
   181 // ----------------------------------------------------------------------------
       
   182 // CBrowserLauncher::LaunchBrowserSyncEmbeddedL
       
   183 // ----------------------------------------------------------------------------
       
   184 //
       
   185 EXPORT_C 
       
   186 TInt CBrowserLauncher::LaunchBrowserSyncEmbeddedL
       
   187                       ( TInt aContextId, 
       
   188                         MDownloadedContentHandler* aContentHandler, 
       
   189                         TBrowserOverriddenSettings* aSettings )
       
   190     {
       
   191     LaunchBrowserEmbeddedL
       
   192                       ( /*aParams*/KNullDesC, 
       
   193                         aContextId, 
       
   194                         aContentHandler, 
       
   195                         /*aExitObserver*/0, 
       
   196                         aSettings );
       
   197 
       
   198     return (iExtension->WaitBrowserToFinish());
       
   199     }
       
   200 
       
   201 // ----------------------------------------------------------------------------
       
   202 // CBrowserLauncher::Cancel
       
   203 // ----------------------------------------------------------------------------
       
   204 //
       
   205 EXPORT_C 
       
   206 void CBrowserLauncher::Cancel()
       
   207     {
       
   208     // Terminate the Browser
       
   209     delete iExtension;
       
   210     iExtension = 0;
       
   211     iFavouritesSess.Close();    
       
   212     }
       
   213 
       
   214 // -----------------------------------------------------------------------------
       
   215 // CBrowserLauncher::LaunchBrowserEmbeddedL
       
   216 // If aParams is not empty, then it is used, otherwise aContextId is used.
       
   217 // -----------------------------------------------------------------------------
       
   218 //
       
   219 void CBrowserLauncher::LaunchBrowserEmbeddedL
       
   220                       ( const TDesC& aParams, 
       
   221                         TInt aContextId, 
       
   222                         MDownloadedContentHandler* aContentHandler, 
       
   223                         MAknServerAppExitObserver* aExitObserver, 
       
   224                         TBrowserOverriddenSettings* aSettings )
       
   225     {
       
   226     LOG_ENTERFN( "CBrowserLauncher::LaunchBrowserEmbeddedL" );
       
   227     
       
   228     LOG_WRITE_FORMAT(" aParams: [%S]", &aParams);
       
   229     LOG_WRITE_FORMAT(" aContextId: %d", aContextId);
       
   230     LOG_WRITE_FORMAT(" aContentHandler: 0x%x", aContentHandler);
       
   231     LOG_WRITE_FORMAT(" aExitObserver: 0x%x", aExitObserver);
       
   232     LOG_WRITE_FORMAT(" aSettings: 0x%x", aSettings);
       
   233 
       
   234     // Check for ciritical disk space if starts as embeded
       
   235     RFs fs;
       
   236 	User::LeaveIfError(fs.Connect());
       
   237 	TInt drive( EDriveC );
       
   238 	TBool isSpace( EFalse );
       
   239 	TInt err( KErrNone );
       
   240 	TRAP( err, isSpace = !SysUtil::DiskSpaceBelowCriticalLevelL(&fs, KMinimumCDriveDiskSpace, drive ));
       
   241 	fs.Close();
       
   242 	if (!isSpace)
       
   243 		User::Leave(KErrDiskFull);
       
   244 	
       
   245 	
       
   246 	TInt folderUid = 0;
       
   247     TInt folderPreferredUid = 0;
       
   248     
       
   249     // keep a local ptr to aSettings
       
   250     TBrowserOverriddenSettings* aOverrideSettings = aSettings;
       
   251     
       
   252     TUid embeddingAppUid = CEikonEnv::Static()->EikAppUi()->Application()->AppDllUid();
       
   253     LOG_WRITE_FORMAT(" embeddingAppUid: 0x%x", embeddingAppUid);
       
   254     
       
   255     iExtension = CBrowserLauncherExtension::NewL( *this );
       
   256     User::LeaveIfError( iFavouritesSess.Connect() );    
       
   257 	
       
   258     if ( 0 == aParams.Length() )
       
   259         {       
       
   260         // SPECIAL folder UID handling
       
   261         folderUid = KFavouritesNullUid;
       
   262         TUint specialContextId = EBrowserContextIdNormal;
       
   263         
       
   264         switch(aContextId)
       
   265         	{
       
   266         		case KFavouritesFeedsContextId:
       
   267   					// For feeds, leave uid to Root as it is here.
       
   268   					// Upon launch, browser will then switch into the Feeds view
       
   269         			// upon opening.
       
   270         			specialContextId = EBrowserContextIdFeeds;
       
   271         			folderUid = KFavouritesRootUid;
       
   272         			folderPreferredUid = KFavouritesNullUid;
       
   273         			break;
       
   274         		default:
       
   275         			break;
       
   276         	}
       
   277         	
       
   278         // If we have now just set the folderUid, then
       
   279         // we need to tell browser of the context id if it's not done already
       
   280         if(folderUid != KFavouritesNullUid)
       
   281         	{
       
   282        		// if we're already given override settings and the specialContextId
       
   283        		// is not already given, set it now
       
   284        		if(aOverrideSettings)
       
   285        			{
       
   286        			if(aOverrideSettings->GetBrowserSetting(EBrowserOverSettingsContextId) != EBrowserContextIdUndefined)
       
   287        				{
       
   288        				aOverrideSettings->SetBrowserSetting(EBrowserOverSettingsContextId, specialContextId);
       
   289    					}
       
   290        			}
       
   291    			else
       
   292    				{
       
   293    					aOverrideSettings = new (ELeave) TBrowserOverriddenSettings;
       
   294    					CleanupStack::PushL( aOverrideSettings );
       
   295    					aOverrideSettings->SetBrowserSetting(EBrowserOverSettingsContextId, specialContextId);					
       
   296        			}
       
   297         	}      	
       
   298         if(folderUid == KFavouritesNullUid)
       
   299         	{        
       
   300 	        // Resolve folder uid
       
   301 	        folderUid = FolderByContextIdL( aContextId );
       
   302 	        if ( folderUid == KFavouritesNullUid )
       
   303 	            {
       
   304 	                folderUid = KFavouritesRootUid;
       
   305 	            }
       
   306 	        folderPreferredUid = BookmarksIdByFolderIdL( folderUid );
       
   307 	        }
       
   308         }
       
   309 	LOG_WRITE_FORMAT("folderPreferredUid = 0x%x", folderPreferredUid );
       
   310 	
       
   311 	// Initialize client and connect to Browser application.
       
   312     iExtension->iLauncherClientService.InitializeL( iBrowserUid, *iExtension );
       
   313     
       
   314   	LOG_WRITE("After iLauncherClientService.InitializeL ");
       
   315     
       
   316     // Start listening to Browser application.
       
   317     iExtension->iLauncherClientService.ListenL( );
       
   318     LOG_WRITE("After iLauncherClientService.ListenL ");
       
   319     
       
   320     // Set handler of finished download.
       
   321     iExtension->iDownloadedContentHandler = aContentHandler;
       
   322     // Set handler of server exit.
       
   323     iExtension->iBrowserLauncherClientExitObserver = aExitObserver;
       
   324 
       
   325     HBufC* seamlessParam = 0;
       
   326     if ( !aParams.Length()  && folderPreferredUid  && EnhancedSeamlessLinkLocalFeaturesSupportedL() )
       
   327         {
       
   328         seamlessParam = HBufC::NewLC( KBrowserSeamlessParamLength );
       
   329         seamlessParam->Des().Copy( KBookmarkStarterString );
       
   330         seamlessParam->Des().AppendNum( folderPreferredUid );
       
   331         }
       
   332 
       
   333     // Pack aSettings,folderUid,aParams into a descriptor, and send the
       
   334     // data to Browser application.
       
   335     // Note: if seamlessParam is not empty, it must be used instead of aParams!
       
   336     HBufC8* bufferToSend = 0;    
       
   337     if ( seamlessParam )
       
   338         {
       
   339 		// Create descriptor with seamless seamlessParam
       
   340         bufferToSend = TLauncherPackageUtils::PackLauncherDataL( embeddingAppUid, aOverrideSettings, folderUid, *seamlessParam, aContentHandler!=0 );
       
   341         }
       
   342     else
       
   343         {
       
   344 		// Create descriptor with seamless aParams
       
   345         bufferToSend = TLauncherPackageUtils::PackLauncherDataL( embeddingAppUid, aOverrideSettings, folderUid, aParams, aContentHandler!=0 );
       
   346         }
       
   347     // Remember for this buffer in the Extension, because re-initialization.
       
   348     iExtension->SetPackedLauncherData( bufferToSend );
       
   349     
       
   350     // dbg
       
   351     // iExtension->iLauncherClientService.SendCommand( EServerExit );
       
   352     // iExtension->iLauncherClientService.SendSync( *bufferToSend );
       
   353     // dbg
       
   354     
       
   355     // Send parameters to Browser application.
       
   356     iExtension->iLauncherClientService.SendAsync( *bufferToSend, iExtension->iBufferSizeP );
       
   357     
       
   358     if ( seamlessParam )
       
   359         {
       
   360         CleanupStack::PopAndDestroy( seamlessParam ); // seamlessParam
       
   361         }
       
   362 
       
   363 	// Cleanup overridden settings. If it was passed in as NULL, and the local
       
   364 	// version is not, it means we allocated locally for it. Cleanup
       
   365 	if(!aSettings && aOverrideSettings)
       
   366 		{
       
   367 			CleanupStack::PopAndDestroy(1); //aOverrideSettings
       
   368 		}
       
   369     LOG_WRITE("LaunchBrowserEmbeddedL End ");
       
   370     }
       
   371 
       
   372 // -----------------------------------------------------------------------------
       
   373 // CBrowserLauncher::FolderByContextIdL
       
   374 // -----------------------------------------------------------------------------
       
   375 //
       
   376 TInt CBrowserLauncher::FolderByContextIdL( TUint32 aContextId )
       
   377     {
       
   378     LOG_ENTERFN( "CBrowserLauncher::FolderByContextIdL" );
       
   379 
       
   380     TInt folder = KFavouritesNullUid;
       
   381     if ( aContextId != (TUint32)KFavouritesNullContextId )
       
   382         {
       
   383         CArrayFix<TInt>* uids = new (ELeave) CArrayFixFlat<TInt>( 1 );
       
   384         CleanupStack::PushL( uids );
       
   385 
       
   386         RFavouritesDb db;
       
   387         User::LeaveIfError( db.Open( iFavouritesSess, KBrowserBookmarks ) );
       
   388         CleanupClosePushL<RFavouritesDb>( db );
       
   389         User::LeaveIfError( db.GetUids( *uids, KFavouritesNullUid,
       
   390             CFavouritesItem::EFolder, NULL, aContextId ) );
       
   391 
       
   392         if( uids->Count() > 0 )
       
   393             {
       
   394             folder = uids->At( 0 );
       
   395             }
       
   396         CleanupStack::PopAndDestroy( 2 );   // db, uids
       
   397     }
       
   398 
       
   399     return folder;
       
   400     }
       
   401 
       
   402 // -----------------------------------------------------------------------------
       
   403 // CBrowserLauncher::BookmarksIdByFolderIdL
       
   404 // -----------------------------------------------------------------------------
       
   405 //
       
   406 TInt CBrowserLauncher::BookmarksIdByFolderIdL( TUint32 aFolderId )
       
   407     {
       
   408     TInt bookmarkId = KFavouritesNullUid;
       
   409     if ( aFolderId != (TUint32)NULL )
       
   410         {
       
   411 
       
   412         RFavouritesDb db;
       
   413         User::LeaveIfError( db.Open( iFavouritesSess, KBrowserBookmarks ) );
       
   414         CleanupClosePushL<RFavouritesDb>( db );
       
   415         User::LeaveIfError( db.PreferredUid( aFolderId , bookmarkId ) );
       
   416 
       
   417         CleanupStack::PopAndDestroy( );   // db
       
   418         }
       
   419     return bookmarkId;
       
   420     }
       
   421 
       
   422 // -----------------------------------------------------------------------------
       
   423 // CBrowserLauncher::EnhancedSeamlessLinkLocalFeaturesSupportedL
       
   424 // -----------------------------------------------------------------------------
       
   425 //
       
   426 TBool CBrowserLauncher::EnhancedSeamlessLinkLocalFeaturesSupportedL()
       
   427     {
       
   428     TBool supported = EFalse;
       
   429     TInt featureBitmask;
       
   430 
       
   431     CRepository* repository = CRepository::NewL( KCRUidBrowserUiLV );
       
   432     //Read local features bitmask
       
   433         if ( repository->Get( KBrowserUiCommonFlags, featureBitmask ) != KErrNone )
       
   434             {
       
   435             featureBitmask = 0;
       
   436             } 
       
   437         if  ( featureBitmask /*& KBrowserUiPreferredBookmarks*/  )
       
   438             {    
       
   439             supported = ETrue;
       
   440             }
       
   441     delete repository;
       
   442 
       
   443     return supported;
       
   444     }
       
   445 
       
   446 // ---------------------------------------------------------
       
   447 // TLauncherPackageUtils::PackLauncherDataL()
       
   448 // ---------------------------------------------------------
       
   449 //
       
   450 HBufC8* TLauncherPackageUtils::PackLauncherDataL( const TUid aEmbeddingAppUid, 
       
   451 												  const TBrowserOverriddenSettings* aSettings, 
       
   452 												  TInt folderUid, 
       
   453 												  const TDesC& seamlessParam, 
       
   454 												  TBool aIsContentHandlerRegistered )
       
   455     {
       
   456     TBool isOverriddenSettings( EFalse );
       
   457     
       
   458     // Check if the overridden settings was set
       
   459     if ( aSettings )
       
   460     	{
       
   461     	isOverriddenSettings = ETrue;
       
   462     	}
       
   463     	
       
   464 	// Create the package
       
   465 	TPckgC<TUid> embeddingAppUidPckg( aEmbeddingAppUid );
       
   466     TPckgC<TBool> isOverriddenSettingsPckg( isOverriddenSettings );    
       
   467     TPckgC<TBrowserOverriddenSettings>* pSettingsPckg( 0 );    
       
   468     if ( aSettings )
       
   469     	{
       
   470     	// Put Overridden settings in package if it is not NULL
       
   471     	pSettingsPckg = new (ELeave) TPckgC<TBrowserOverriddenSettings>( *aSettings );
       
   472     	CleanupStack::PushL( pSettingsPckg );
       
   473     	}   
       
   474     TPckgC<TInt> folderUidPckg( folderUid );
       
   475     TPtrC8 seamlessParamPtr( (const TUint8*)seamlessParam.Ptr(), seamlessParam.Size() );
       
   476     TPckgC<TBool> isContentHandlerRegistered( aIsContentHandlerRegistered );
       
   477 
       
   478 	// Get the size of all packages
       
   479 	TInt totalSize;	
       
   480 	if ( aSettings )
       
   481 		{
       
   482 	    totalSize = embeddingAppUidPckg.Size() + 
       
   483 	    			isOverriddenSettingsPckg.Size() + 
       
   484 	    			(*pSettingsPckg).Size() + 
       
   485 	    			folderUidPckg.Size() + 
       
   486 	    			seamlessParamPtr.Size() + 
       
   487 	    			isContentHandlerRegistered.Size();
       
   488 		}
       
   489 	else
       
   490 		{
       
   491 	    totalSize = embeddingAppUidPckg.Size() + 
       
   492 	     			isOverriddenSettingsPckg.Size() + 
       
   493 	     			folderUidPckg.Size() + 
       
   494 	     			seamlessParamPtr.Size() + 
       
   495 	     			isContentHandlerRegistered.Size();
       
   496 		}
       
   497 		
       
   498 	// Allocate buffer for packages
       
   499     HBufC8* buff = HBufC8::NewL( totalSize );
       
   500     
       
   501     // Pack the packages to buffer
       
   502     buff->Des().Copy( embeddingAppUidPckg );
       
   503 	buff->Des().Append( isOverriddenSettingsPckg );
       
   504 	if ( aSettings )
       
   505 		{
       
   506 		buff->Des().Append( *pSettingsPckg );
       
   507 		}    	
       
   508     buff->Des().Append( folderUidPckg );
       
   509     buff->Des().Append( isContentHandlerRegistered );
       
   510     buff->Des().Append( seamlessParamPtr );
       
   511     
       
   512     if ( aSettings )
       
   513     	{
       
   514     	CleanupStack::PopAndDestroy( ); // pSettingsPckg
       
   515     	}    
       
   516     return buff;
       
   517     }
       
   518     
       
   519 // ---------------------------------------------------------
       
   520 // TLauncherPackageUtils::PackLauncherDataL()
       
   521 // ---------------------------------------------------------
       
   522 //
       
   523 void TLauncherPackageUtils::UnPackLauncherDataL( TUid& aEmbeddingAppUid, TBrowserOverriddenSettings* aSettings, TInt& aFolderUid, TPtrC& aSeamlessParam, const TDesC8& aData, TBool& aIsContentHandlerRegistered, TBool& aIsOverriddenSettings )
       
   524     {
       
   525     TInt pos( 0 );
       
   526 
       
   527 	// Get the first parameter aEmbeddingAppUid from IPC data
       
   528     TPckg<TUid> embeddingAppUid( aEmbeddingAppUid );
       
   529     embeddingAppUid.Copy( aData.Mid( pos, embeddingAppUid.Size() ) );    
       
   530     pos += embeddingAppUid.Size();
       
   531 
       
   532 	// Get the parameter isOverriddenSettings from IPC data
       
   533     TPckg<TBool> isOveriddenSettings( aIsOverriddenSettings );
       
   534     isOveriddenSettings.Copy( aData.Mid( pos, isOveriddenSettings.Size() ) );    
       
   535     pos += isOveriddenSettings.Size();
       
   536     
       
   537     if ( aIsOverriddenSettings )
       
   538     	{
       
   539     	// Unpack the overridden settings
       
   540 	    TPckg<TBrowserOverriddenSettings> settingsPckg( *aSettings );
       
   541 	    settingsPckg.Copy( aData.Mid( pos, settingsPckg.Size() ) );
       
   542 	    pos += settingsPckg.Size();    	
       
   543     	}
       
   544 	else
       
   545 		{
       
   546     	// No overridden setings were put in IPC data
       
   547 		aSettings = NULL;
       
   548 		}    	
       
   549 
       
   550 	// Get second parameters from IPC data
       
   551     TPckg<TInt> folderUidPckg( aFolderUid );
       
   552     folderUidPckg.Copy( aData.Mid( pos, folderUidPckg.Size() ) );
       
   553     pos += folderUidPckg.Size();
       
   554 
       
   555 	// Get third parameters from IPC data
       
   556     TPckg<TBool> isContentHandlerRegistered( aIsContentHandlerRegistered );
       
   557     isContentHandlerRegistered.Copy( aData.Mid( pos, isContentHandlerRegistered.Size() ) );    
       
   558     pos += isContentHandlerRegistered.Size();
       
   559 
       
   560     TPtrC8 remaining = aData.Mid( pos );
       
   561     aSeamlessParam.Set( (const TUint16*)remaining.Ptr(), remaining.Size()/2 );
       
   562     }
       
   563 // End of file