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