Bug 684825 Fix for ASSERTION: QueryInterface needed r=jmuizelaar

This commit is contained in:
Neil Rashbrook 2011-09-24 18:20:12 +01:00
parent 312bca329e
commit e0fc97dd2d

View File

@ -487,19 +487,17 @@ nsHTMLCanvasElement::GetContext(const nsAString& aContextId,
return NS_ERROR_FAILURE;
}
nsCOMPtr<nsIPropertyBag> contextProps;
nsCOMPtr<nsIWritablePropertyBag2> contextProps;
if (!JSVAL_IS_NULL(aContextOptions) &&
!JSVAL_IS_VOID(aContextOptions))
{
JSContext *cx = nsContentUtils::GetCurrentJSContext();
nsCOMPtr<nsIWritablePropertyBag2> newProps;
// note: if any contexts end up supporting something other
// than objects, e.g. plain strings, then we'll need to expand
// this to know how to create nsISupportsStrings etc.
if (JSVAL_IS_OBJECT(aContextOptions)) {
newProps = do_CreateInstance("@mozilla.org/hash-property-bag;1");
contextProps = do_CreateInstance("@mozilla.org/hash-property-bag;1");
JSObject *opts = JSVAL_TO_OBJECT(aContextOptions);
JSIdArray *props = JS_Enumerate(cx, opts);
@ -520,11 +518,11 @@ nsHTMLCanvasElement::GetContext(const nsAString& aContextId,
}
if (JSVAL_IS_BOOLEAN(propval)) {
newProps->SetPropertyAsBool(pstr, propval == JSVAL_TRUE ? PR_TRUE : PR_FALSE);
contextProps->SetPropertyAsBool(pstr, propval == JSVAL_TRUE ? PR_TRUE : PR_FALSE);
} else if (JSVAL_IS_INT(propval)) {
newProps->SetPropertyAsInt32(pstr, JSVAL_TO_INT(propval));
contextProps->SetPropertyAsInt32(pstr, JSVAL_TO_INT(propval));
} else if (JSVAL_IS_DOUBLE(propval)) {
newProps->SetPropertyAsDouble(pstr, JSVAL_TO_DOUBLE(propval));
contextProps->SetPropertyAsDouble(pstr, JSVAL_TO_DOUBLE(propval));
} else if (JSVAL_IS_STRING(propval)) {
JSString *propvalString = JS_ValueToString(cx, propval);
nsDependentJSString vstr;
@ -533,12 +531,10 @@ nsHTMLCanvasElement::GetContext(const nsAString& aContextId,
return NS_ERROR_FAILURE;
}
newProps->SetPropertyAsAString(pstr, vstr);
contextProps->SetPropertyAsAString(pstr, vstr);
}
}
}
contextProps = newProps;
}
rv = UpdateContext(contextProps);