first hack to get relative URLS working in triggers
This commit is contained in:
Родитель
cea3644efe
Коммит
705f624786
|
@ -148,12 +148,32 @@ InstallTriggerGlobalInstall(JSContext *cx, JSObject *obj, uintN argc, jsval *arg
|
|||
if (nsnull == nativeThis && (JS_FALSE == CreateNativeObject(cx, obj, &nativeThis)) )
|
||||
return JS_FALSE;
|
||||
|
||||
|
||||
// make sure XPInstall is enabled, return false if not
|
||||
PRBool enabled = PR_FALSE;
|
||||
nativeThis->UpdateEnabled(&enabled);
|
||||
if (!enabled)
|
||||
return JS_TRUE;
|
||||
|
||||
|
||||
// get window.location to construct relative URLs
|
||||
nsString baseURL;
|
||||
JSObject* global = JS_GetGlobalObject(cx);
|
||||
if (global)
|
||||
{
|
||||
jsval v;
|
||||
if (JS_GetProperty(cx,global,"location",&v))
|
||||
{
|
||||
ConvertJSValToStr( baseURL, cx, v );
|
||||
PRInt32 lastslash = baseURL.RFindChar('/');
|
||||
if (lastslash != kNotFound)
|
||||
{
|
||||
baseURL.Truncate(lastslash+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// parse associative array of installs
|
||||
if ( argc >= 1 && JSVAL_IS_OBJECT(argv[0]) )
|
||||
{
|
||||
|
@ -179,7 +199,13 @@ InstallTriggerGlobalInstall(JSContext *cx, JSObject *obj, uintN argc, jsval *arg
|
|||
{
|
||||
nsXPITriggerItem *item = new nsXPITriggerItem( name, URL );
|
||||
if ( item )
|
||||
{
|
||||
if ( item->IsRelativeURL() )
|
||||
{
|
||||
item->mURL.Insert( baseURL, 0 );
|
||||
}
|
||||
trigger->Add( item );
|
||||
}
|
||||
else
|
||||
; // XXX signal error somehow
|
||||
}
|
||||
|
@ -189,12 +215,14 @@ InstallTriggerGlobalInstall(JSContext *cx, JSObject *obj, uintN argc, jsval *arg
|
|||
JS_DestroyIdArray( cx, ida );
|
||||
}
|
||||
|
||||
|
||||
// save callback function if any (ignore bad args for now)
|
||||
if ( argc >= 2 && JS_TypeOfValue(cx,argv[1]) == JSTYPE_FUNCTION )
|
||||
{
|
||||
trigger->SaveCallback( cx, argv[1] );
|
||||
}
|
||||
|
||||
|
||||
// pass on only if good stuff found
|
||||
if (trigger->Size() > 0)
|
||||
{
|
||||
|
|
|
@ -63,6 +63,16 @@ nsXPITriggerItem::~nsXPITriggerItem()
|
|||
MOZ_COUNT_DTOR(nsXPITriggerItem);
|
||||
}
|
||||
|
||||
PRBool nsXPITriggerItem::IsRelativeURL()
|
||||
{
|
||||
PRInt32 cpos = mURL.FindChar(':');
|
||||
if (cpos == kNotFound)
|
||||
return PR_TRUE;
|
||||
|
||||
PRInt32 spos = mURL.FindChar('/');
|
||||
return (cpos > spos);
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// nsXPITriggerInfo
|
||||
|
|
|
@ -62,6 +62,7 @@ class nsXPITriggerItem
|
|||
nsCOMPtr<nsIFileSpec> mFile;
|
||||
|
||||
PRBool IsFileURL() { return mURL.Equals("file:/",PR_FALSE,6); }
|
||||
PRBool IsRelativeURL();
|
||||
|
||||
private:
|
||||
//-- prevent inadvertent copies and assignments
|
||||
|
|
Загрузка…
Ссылка в новой задаче