Hi Laca,
Laszlo (Laca) Peter wrote:
> Hi Dave, Brian,
>
> A few questions about this.
> If I understand correctly from the code fragment in the patch,
> the .autoreg is not deleted, instead the code checks if
> the compreg.dat file is older or not.
> So what happens when a non-privileged user runs firefox after
> .autoreg is touched?  I suspect that a compreg.dat is created
> in their ~/.mozilla?  Does the code check if this is newer
> than .autoreg or does it check /usr/lib/firefox only or both?
> Can you explain in more detail please?
>
>   
The registration mechanism changed from Mozilla to Firefox, the registry 
files are treated as a kind of profiles and locate at profile 
directory(~/.mozilla) for all user including "root", so Firefox will 
check it there regardless compreg.dat at /usr/lib/firefox.

> Also, does this mean that all users will experience a delay 
> first time after .autoreg is touched?
Yes, but this cost is much small and this scenario is only for user 
removing apoc adapter after initial installation which probably would 
not happen.
>   Can we avoid this?
> Any way we can regenerate compreg.dat in /usr/lib/firefox
>   
this doesn't work due to the reason above.
> without running firefox itself?  Something we can do in a postrun
> script maybe?
>   
Thanks,
Dave
> Thanks,
> Laca
>
> On Wed, 2007-03-14 at 15:09 +0800, Dave Lin wrote:
>   
>> Hi All,
>>
>> To fully fix this bug, we need to make change both in code file 
>> nsXPComInit.cpp(part 1) and spec file SUNWfirefox.spec(part 2).
>>
>> Here comes the patch for SUNWfirefox.spec. The patch works like this,
>> the file  ".autoreg" will be delivered in SUNWfirefox, 
>> SUNWfirefox-apoc-adapter's postremove script will touch .autoreg right 
>> after apoc removal,  then when Firefox starts up next time, it will 
>> detect this file is newer than "components/compreg.dat" and call the 
>> registration program to update component registration information.
>>
>> Dave.
>> Brian Lu wrote:
>>     
>>> Fix the bug CR 6521792: Firefox cannot start,after removing apoc 
>>> adapter,with user account setup when apoc adapter installed
>>> ------------------------------------------------------------------------
>>>
>>> --- mozilla/xpcom/build/nsXPComInit.cpp.old 2006-08-05 01:50:52.000000000 
>>> +0800
>>> +++ mozilla/xpcom/build/nsXPComInit.cpp     2007-03-09 11:05:45.166807000 
>>> +0800
>>> @@ -262,6 +262,7 @@
>>>  // compreg.dat file.  If the .autoreg file is newer, we autoregister.
>>>  static PRBool CheckUpdateFile()
>>>  {
>>> +    PRBool ret;
>>>      nsresult rv;
>>>      nsCOMPtr<nsIFile> file;
>>>      rv = nsDirectoryService::gService->Get(NS_XPCOM_CURRENT_PROCESS_DIR, 
>>> @@ -297,8 +298,13 @@
>>>      PRInt64 compregModTime, autoregModTime;
>>>      compregFile->GetLastModifiedTime(&compregModTime);
>>>      file->GetLastModifiedTime(&autoregModTime);
>>> -
>>> -    return LL_CMP(autoregModTime, >, compregModTime);
>>> + 
>>> +    ret = LL_CMP(autoregModTime, >, compregModTime);
>>> +    if (ret)
>>> +    {
>>> +      compregFile->Remove(PR_FALSE);
>>> +    }
>>> +    return ret;
>>>  }
>>>  
>>>  
>>> @@ -622,6 +628,7 @@
>>>          for (int i = 0; i < components_length; i++)
>>>              RegisterGenericFactory(registrar, &components[i]);
>>>      }
>>> +    CheckUpdateFile();
>>>      rv = 
>>> nsComponentManagerImpl::gComponentManager->ReadPersistentRegistry();
>>>  #ifdef DEBUG    
>>>      if (NS_FAILED(rv)) {
>>> @@ -629,7 +636,7 @@
>>>      }
>>>  #endif
>>>  
>>> -    if ( NS_FAILED(rv) || CheckUpdateFile()) {
>>> +    if ( NS_FAILED(rv)) {
>>>          // if we find no persistent registry, we will try to autoregister
>>>          // the default components directory.
>>>          nsComponentManagerImpl::gComponentManager->AutoRegister(nsnull);
>>>   
>>>       
>
>   


Reply via email to