mozilla-helper-app.patch
branchmozilla-1.9.2
changeset 174 b3f909e83302
parent 160 2a08bb18befb
child 175 d355ae17bbde
equal deleted inserted replaced
160:2a08bb18befb 174:b3f909e83302
     1 From: Wolfgang Rosenauer <wr@rosenauer.org>
       
     2 Subject: no helper app for application/octet-stream but recognized extensions
       
     3 References:
       
     4 https://bugzilla.novell.com/show_bug.cgi?id=406979
       
     5 https://bugzilla.mozilla.org/show_bug.cgi?id=327323
       
     6 
       
     7 diff --git a/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp b/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp
       
     8 --- a/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp
       
     9 +++ b/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp
       
    10 @@ -47,6 +47,7 @@
       
    11  #include "nsMIMEInfoUnix.h"
       
    12  #include "nsGNOMERegistry.h"
       
    13  #include "nsIGnomeVFSService.h"
       
    14 +#include "nsAutoPtr.h"
       
    15  #ifdef MOZ_ENABLE_DBUS
       
    16  #include "nsDBusHandlerApp.h"
       
    17  #endif
       
    18 @@ -74,13 +75,16 @@ NS_IMETHODIMP
       
    19  nsMIMEInfoUnix::GetHasDefaultHandler(PRBool *_retval)
       
    20  {
       
    21    *_retval = PR_FALSE;
       
    22 -  nsCOMPtr<nsIGnomeVFSService> vfs = do_GetService(NS_GNOMEVFSSERVICE_CONTRACTID);
       
    23 -  if (vfs) {
       
    24 -    nsCOMPtr<nsIGnomeVFSMimeApp> app;
       
    25 -    if (NS_SUCCEEDED(vfs->GetAppForMimeType(mType, getter_AddRefs(app))) && app)
       
    26 -      *_retval = PR_TRUE;
       
    27 +  nsRefPtr<nsMIMEInfoBase> mimeInfo = nsGNOMERegistry::GetFromType(mType);
       
    28 +  if (!mimeInfo) {
       
    29 +    nsCAutoString ext;
       
    30 +    GetPrimaryExtension(ext);
       
    31 +    mimeInfo = nsGNOMERegistry::GetFromExtension(ext);
       
    32    }
       
    33  
       
    34 +  if (mimeInfo)
       
    35 +    *_retval = PR_TRUE;
       
    36 +
       
    37    if (*_retval)
       
    38      return NS_OK;
       
    39  
       
    40 @@ -113,6 +117,16 @@ nsMIMEInfoUnix::LaunchDefaultWithFile(ns
       
    41      nsCOMPtr<nsIGnomeVFSMimeApp> app;
       
    42      if (NS_SUCCEEDED(vfs->GetAppForMimeType(mType, getter_AddRefs(app))) && app)
       
    43        return app->Launch(nativePath);
       
    44 +
       
    45 +    // If we haven't got an app we try to get a valid one by searching for the
       
    46 +    // extension mapped type
       
    47 +    nsRefPtr<nsMIMEInfoBase> mimeInfo = nsGNOMERegistry::GetFromExtension(nativePath);
       
    48 +    if (mimeInfo) {
       
    49 +      nsCAutoString type;
       
    50 +      mimeInfo->GetType(type);
       
    51 +      if (NS_SUCCEEDED(vfs->GetAppForMimeType(type, getter_AddRefs(app))) && app)
       
    52 +        return app->Launch(nativePath);
       
    53 +    }
       
    54    }
       
    55  
       
    56    if (!mDefaultApplication)
       
    57 diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exthandler/unix/nsOSHelperAppService.cpp
       
    58 --- a/uriloader/exthandler/unix/nsOSHelperAppService.cpp
       
    59 +++ b/uriloader/exthandler/unix/nsOSHelperAppService.cpp
       
    60 @@ -1580,8 +1580,16 @@ nsOSHelperAppService::GetMIMEInfoFromOS(
       
    61        return retval;
       
    62      }
       
    63  
       
    64 -    // Copy the attributes of retval onto miByExt, to return it
       
    65 +    // Copy the attributes of retval (mimeinfo from type) onto miByExt, to
       
    66 +    // return it 
       
    67 +    // but reset to just collected mDefaultAppDescription (from ext)
       
    68 +    // and preserve the primary extension as well
       
    69 +    nsAutoString byExtDefault;
       
    70 +    miByExt->GetDefaultDescription(byExtDefault);
       
    71 +    retval->SetDefaultDescription(byExtDefault);
       
    72      retval->CopyBasicDataTo(miByExt);
       
    73 +    if (!aFileExt.IsEmpty())
       
    74 +      miByExt->SetPrimaryExtension(aFileExt);
       
    75  
       
    76      miByExt.swap(retval);
       
    77    }