lazarus-ccr/components/geckoport/nsErrorUtils.pas
Joshy 231a966bd9 Rearranged DirectoryService from CallbackInterfaces to XPCOMGlue.
Directory Service is now added via Service Manager instead XRE_InitEmbedding.
Removed unused units from uses clause.
Clean shutdown if XRE Engine is not loaded.
Message in the GeckoBrowser if initialization failed.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@1391 8e941d3f-bd1b-0410-a28a-d453659cc2b4
2010-11-29 14:01:04 +00:00

104 lines
2.5 KiB
ObjectPascal

unit nsErrorUtils;
{$MACRO on}
{$IFDEF Windows}
{$DEFINE extdecl:=stdcall}
{$ELSE Windows}
{$DEFINE extdecl:=cdecl}
{$ENDIF}
interface
uses
nsTypes;
function NS_GetErrorStringBundle(aErrorModule: PRInt16): AnsiString;
function NS_GetErrorStringBundleKey(aError: nsresult): AnsiString;
implementation
uses
nsXPCOMGlue, nsXPCOM, nsError;
type
nsIErrorService = interface;
nsIErrorService = interface(nsISupports)
['{e72f94b2-5f85-11d4-9877-00c04fa0cf4a}']
function registerErrorStringBundle(
aErrorModule: PRInt16;
aStringBundleURL: PAnsiChar): nsresult; extdecl;
function unregisterErrorStringBundle(
aErrorModule: PRInt16): nsresult; extdecl;
function getErrorStringBundle(
aErrorModule: PRInt16;
out aResult: PAnsiChar): nsresult; extdecl;
function registerErrorStringBundleKey(
aError: nsresult;
aStringBundleKey: PAnsiChar): nsresult; extdecl;
function unregisterErrorStringBundleKey(
aError: nsresult): nsresult; extdecl;
function getErrorStringBundleKey(
aError: nsresult;
out aResult: PAnsiChar): nsresult; extdecl;
end;
const
NS_IERRORSERVICE_CID: TGUID = '{e72f94b2-5f85-11d4-9877-00c04fa0cf4a}';
NS_ERRORSERVICE_NAME = 'Error Service';
NS_ERRORSERVICE_CONTRACTID = '@mozilla.org/xpcom/error-service;1';
NS_ERRORSERVICE_CID: TGUID = '{744afd5e-5f8c-11d4-9877-00c04fa0cf4a}';
var
sErrorService: nsIErrorService = nil;
function ENSURE_ErrorService(): nsIErrorService;
var
es: nsIErrorService;
begin
if not Assigned(sErrorService) then
begin
try
NS_GetService(NS_ERRORSERVICE_CONTRACTID, nsIErrorService, es);
sErrorService := es;
except
end;
end;
Result := sErrorService;
end;
function NS_GetErrorStringBundle(aErrorModule: PRInt16): AnsiString;
var
es: nsIErrorService;
rv: nsresult;
str: PAnsiChar;
begin
es := ENSURE_ErrorService();
if Assigned(es) then
begin
rv := es.getErrorStringBundle(aErrorModule, str);
if NS_SUCCEEDED(rv) then
Result := str;
end;
end;
function NS_GetErrorStringBundleKey(aError: nsresult): AnsiString;
var
es: nsIErrorService;
rv: nsresult;
str: PAnsiChar;
begin
es := ENSURE_ErrorService();
if Assigned(es) then
begin
rv := es.getErrorStringBundleKey(aError, str);
if NS_SUCCEEDED(rv) then
Result := str;
end
else
result := SGetServiceManagerError;
end;
end.