зеркало из https://github.com/mozilla/gecko-dev.git
Backout 89b87e96dc17 (bug 639720), b449db7a038b (bug 679689) & ef216b965a04 (bug 679671) for Mochitest oranges, on a CLOSED TREE; a=philor
This commit is contained in:
Родитель
52b4490152
Коммит
b1fc1f7d2a
|
@ -1,2 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<img crossorigin>
|
|
@ -93,4 +93,3 @@ load 642022-1.html
|
|||
load 646184.html
|
||||
load 658845-1.svg
|
||||
load 667336-1.html
|
||||
load 679689-1.html
|
||||
|
|
|
@ -1112,7 +1112,7 @@ nsAttrValue::ParseNonNegativeIntValue(const nsAString& aString)
|
|||
return PR_FALSE;
|
||||
}
|
||||
|
||||
SetIntValueAndType(originalVal, eInteger, strict ? nsnull : &aString);
|
||||
SetIntValueAndType(originalVal, eInteger, nsnull);
|
||||
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
@ -1129,7 +1129,7 @@ nsAttrValue::ParsePositiveIntValue(const nsAString& aString)
|
|||
return PR_FALSE;
|
||||
}
|
||||
|
||||
SetIntValueAndType(originalVal, eInteger, strict ? nsnull : &aString);
|
||||
SetIntValueAndType(originalVal, eInteger, nsnull);
|
||||
|
||||
return PR_TRUE;
|
||||
}
|
||||
|
@ -1250,14 +1250,10 @@ nsAttrValue::SetMiscAtomOrString(const nsAString* aValue)
|
|||
"Trying to re-set atom or string!");
|
||||
if (aValue) {
|
||||
PRUint32 len = aValue->Length();
|
||||
// * We're allowing eCSSStyleRule attributes to store empty strings as it
|
||||
// can be beneficial to store an empty style attribute as a parsed rule.
|
||||
// * We're allowing enumerated values because sometimes the empty
|
||||
// string corresponds to a particular enumerated value, especially
|
||||
// for enumerated values that are not limited enumerated.
|
||||
// We're allowing eCSSStyleRule attributes to store empty strings as it
|
||||
// can be beneficial to store an empty style attribute as a parsed rule.
|
||||
// Add other types as needed.
|
||||
NS_ASSERTION(len || Type() == eCSSStyleRule || Type() == eEnum,
|
||||
"Empty string?");
|
||||
NS_ASSERTION(len || Type() == eCSSStyleRule, "Empty string?");
|
||||
MiscContainer* cont = GetMiscContainer();
|
||||
if (len <= NS_ATTRVALUE_MAX_STRINGLENGTH_ATOM) {
|
||||
nsIAtom* atom = NS_NewAtom(*aValue);
|
||||
|
|
|
@ -48,7 +48,6 @@
|
|||
#include "AccessCheck.h"
|
||||
|
||||
#include "xpcprivate.h"
|
||||
#include "XPCWrapper.h"
|
||||
|
||||
#include "nscore.h"
|
||||
#include "nsDOMClassInfo.h"
|
||||
|
@ -517,6 +516,7 @@ static const char kDOMStringBundleURL[] =
|
|||
|
||||
#define WINDOW_SCRIPTABLE_FLAGS \
|
||||
(nsIXPCScriptable::WANT_GETPROPERTY | \
|
||||
nsIXPCScriptable::WANT_SETPROPERTY | \
|
||||
nsIXPCScriptable::WANT_PRECREATE | \
|
||||
nsIXPCScriptable::WANT_FINALIZE | \
|
||||
nsIXPCScriptable::WANT_EQUALITY | \
|
||||
|
@ -5269,6 +5269,39 @@ nsWindowSH::GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
|||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsWindowSH::SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
JSObject *obj, jsid id, jsval *vp, PRBool *_retval)
|
||||
{
|
||||
if (id == sLocation_id) {
|
||||
JSAutoRequest ar(cx);
|
||||
|
||||
JSString *val = ::JS_ValueToString(cx, *vp);
|
||||
NS_ENSURE_TRUE(val, NS_ERROR_UNEXPECTED);
|
||||
|
||||
nsCOMPtr<nsIDOMWindow> window = do_QueryWrappedNative(wrapper);
|
||||
NS_ENSURE_TRUE(window, NS_ERROR_UNEXPECTED);
|
||||
|
||||
nsCOMPtr<nsIDOMLocation> location;
|
||||
nsresult rv = window->GetLocation(getter_AddRefs(location));
|
||||
NS_ENSURE_TRUE(NS_SUCCEEDED(rv) && location, rv);
|
||||
|
||||
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
|
||||
rv = WrapNative(cx, obj, location, &NS_GET_IID(nsIDOMLocation), PR_TRUE,
|
||||
vp, getter_AddRefs(holder));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsDependentJSString depStr;
|
||||
NS_ENSURE_TRUE(depStr.init(cx, val), NS_ERROR_UNEXPECTED);
|
||||
|
||||
rv = location->SetHref(depStr);
|
||||
|
||||
return NS_FAILED(rv) ? rv : NS_SUCCESS_I_DID_SOMETHING;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsWindowSH::Enumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
JSObject *obj, PRBool *_retval)
|
||||
|
@ -6359,62 +6392,6 @@ static JSNewResolveOp sOtherResolveFuncs[] = {
|
|||
mozilla::dom::workers::ResolveWorkerClasses
|
||||
};
|
||||
|
||||
template<class Interface>
|
||||
static nsresult
|
||||
LocationSetterGuts(JSContext *cx, JSObject *obj, jsval *vp)
|
||||
{
|
||||
// This function duplicates some of the logic in XPC_WN_HelperSetProperty
|
||||
XPCWrappedNative *wrapper =
|
||||
XPCWrappedNative::GetWrappedNativeOfJSObject(cx, obj);
|
||||
|
||||
// The error checks duplicate code in THROW_AND_RETURN_IF_BAD_WRAPPER
|
||||
NS_ENSURE_TRUE(wrapper, NS_ERROR_XPC_BAD_OP_ON_WN_PROTO);
|
||||
NS_ENSURE_TRUE(wrapper->IsValid(), NS_ERROR_XPC_HAS_BEEN_SHUTDOWN);
|
||||
|
||||
nsresult rv = NS_OK;
|
||||
|
||||
nsCOMPtr<nsIDOMLocation> location;
|
||||
nsCOMPtr<Interface> xpcomObj = do_QueryWrappedNative(wrapper);
|
||||
NS_ENSURE_TRUE(xpcomObj, NS_ERROR_UNEXPECTED);
|
||||
|
||||
rv = xpcomObj->GetLocation(getter_AddRefs(location));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
JSString *val = ::JS_ValueToString(cx, *vp);
|
||||
NS_ENSURE_TRUE(val, NS_ERROR_UNEXPECTED);
|
||||
|
||||
nsDependentJSString depStr;
|
||||
NS_ENSURE_TRUE(depStr.init(cx, val), NS_ERROR_UNEXPECTED);
|
||||
|
||||
return location->SetHref(depStr);
|
||||
}
|
||||
|
||||
template<class Interface>
|
||||
static JSBool
|
||||
LocationSetter(JSContext *cx, JSObject *obj, jsid id, JSBool strict,
|
||||
jsval *vp)
|
||||
{
|
||||
nsresult rv = LocationSetterGuts<Interface>(cx, obj, vp);
|
||||
if (NS_FAILED(rv)) {
|
||||
nsDOMClassInfo::ThrowJSException(cx, rv);
|
||||
return JS_FALSE;
|
||||
}
|
||||
|
||||
return JS_TRUE;
|
||||
}
|
||||
|
||||
static JSBool
|
||||
LocationSetterUnwrapper(JSContext *cx, JSObject *obj, jsid id, JSBool strict,
|
||||
jsval *vp)
|
||||
{
|
||||
JSObject *wrapped = XPCWrapper::UnsafeUnwrapSecurityWrapper(obj);
|
||||
if (wrapped) {
|
||||
obj = wrapped;
|
||||
}
|
||||
|
||||
return LocationSetter<nsIDOMWindow>(cx, obj, id, strict, vp);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
JSObject *obj, jsid id, PRUint32 flags,
|
||||
|
@ -6567,8 +6544,7 @@ nsWindowSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
|||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
JSBool ok = JS_WrapValue(cx, &v) &&
|
||||
JS_DefinePropertyById(cx, obj, id, v, nsnull,
|
||||
LocationSetterUnwrapper,
|
||||
JS_DefinePropertyById(cx, obj, id, v, nsnull, nsnull,
|
||||
JSPROP_PERMANENT | JSPROP_ENUMERATE);
|
||||
|
||||
if (!ok) {
|
||||
|
@ -8201,8 +8177,7 @@ nsDocumentSH::NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
|||
|
||||
JSAutoRequest ar(cx);
|
||||
|
||||
JSBool ok = ::JS_DefinePropertyById(cx, obj, id, v, nsnull,
|
||||
LocationSetter<nsIDOMDocument>,
|
||||
JSBool ok = ::JS_DefinePropertyById(cx, obj, id, v, nsnull, nsnull,
|
||||
JSPROP_PERMANENT | JSPROP_ENUMERATE);
|
||||
|
||||
if (!ok) {
|
||||
|
@ -8247,6 +8222,34 @@ NS_IMETHODIMP
|
|||
nsDocumentSH::SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
JSObject *obj, jsid id, jsval *vp, PRBool *_retval)
|
||||
{
|
||||
if (id == sLocation_id) {
|
||||
nsCOMPtr<nsIDOMDocument> doc = do_QueryWrappedNative(wrapper);
|
||||
NS_ENSURE_TRUE(doc, NS_ERROR_UNEXPECTED);
|
||||
|
||||
nsCOMPtr<nsIDOMLocation> location;
|
||||
nsresult rv = doc->GetLocation(getter_AddRefs(location));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
if (location) {
|
||||
JSAutoRequest ar(cx);
|
||||
|
||||
JSString *val = ::JS_ValueToString(cx, *vp);
|
||||
NS_ENSURE_TRUE(val, NS_ERROR_UNEXPECTED);
|
||||
|
||||
nsDependentJSString depStr;
|
||||
NS_ENSURE_TRUE(depStr.init(cx, val), NS_ERROR_UNEXPECTED);
|
||||
|
||||
rv = location->SetHref(depStr);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
nsCOMPtr<nsIXPConnectJSObjectHolder> holder;
|
||||
rv = WrapNative(cx, JS_GetGlobalForScopeChain(cx), location,
|
||||
&NS_GET_IID(nsIDOMLocation), PR_TRUE, vp,
|
||||
getter_AddRefs(holder));
|
||||
return NS_FAILED(rv) ? rv : NS_SUCCESS_I_DID_SOMETHING;
|
||||
}
|
||||
}
|
||||
|
||||
if (id == sDocumentURIObject_id && IsPrivilegedScript()) {
|
||||
// We don't want privileged script that can read this property to set it,
|
||||
// but _do_ want to allow everyone else to set a value they can then read.
|
||||
|
|
|
@ -407,6 +407,8 @@ public:
|
|||
#endif
|
||||
NS_IMETHOD GetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
|
||||
NS_IMETHOD SetProperty(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
JSObject *obj, jsid id, jsval *vp, PRBool *_retval);
|
||||
NS_IMETHOD Enumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
JSObject *obj, PRBool *_retval);
|
||||
NS_IMETHOD NewResolve(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
|
|
|
@ -55,7 +55,6 @@ _TEST_FILES = \
|
|||
test_location.html \
|
||||
test_innerWidthHeight_script.html \
|
||||
innerWidthHeight_script.html \
|
||||
test_location_setters.html \
|
||||
$(NULL)
|
||||
|
||||
libs:: $(_TEST_FILES)
|
||||
|
|
|
@ -1,75 +0,0 @@
|
|||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<!--
|
||||
https://bugzilla.mozilla.org/show_bug.cgi?id=639720
|
||||
-->
|
||||
<head>
|
||||
<title>Test for Bug 639720</title>
|
||||
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=639720">Mozilla Bug 639720</a>
|
||||
<p id="display">
|
||||
<iframe id="f"></iframe>
|
||||
</p>
|
||||
<div id="content" style="display: none">
|
||||
|
||||
</div>
|
||||
<pre id="test">
|
||||
<script type="application/javascript">
|
||||
|
||||
/** Test for Bug 639720 **/
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
var tests = [
|
||||
{ url: "data:text/plain,1" },
|
||||
{ url: "data:text/plain,2",
|
||||
useDocument: true },
|
||||
{ prepURL: "http://www.example.com",
|
||||
url: "data:text/plain,3" }
|
||||
];
|
||||
|
||||
var currentTest = 0;
|
||||
|
||||
function checkTest() {
|
||||
is($("f").contentWindow.location.href, tests[currentTest].url);
|
||||
++currentTest;
|
||||
runNextTest();
|
||||
}
|
||||
|
||||
function runCurrentTest() {
|
||||
var test = tests[currentTest];
|
||||
$("f").onload = checkTest;
|
||||
if (test.useDocument) {
|
||||
$("f").contentDocument.location = test.url;
|
||||
} else {
|
||||
$("f").contentWindow.location = test.url;
|
||||
}
|
||||
}
|
||||
|
||||
function prepComplete() {
|
||||
runCurrentTest();
|
||||
}
|
||||
|
||||
function runNextTest() {
|
||||
if (currentTest == tests.length) {
|
||||
SimpleTest.finish();
|
||||
return;
|
||||
}
|
||||
|
||||
var test = tests[currentTest];
|
||||
if ("prepURL" in test) {
|
||||
$("f").onload = prepComplete;
|
||||
$("f").src = test.prepURL;
|
||||
return;
|
||||
}
|
||||
|
||||
runCurrentTest();
|
||||
}
|
||||
|
||||
addLoadEvent(runNextTest);
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Загрузка…
Ссылка в новой задаче