Remove hasStaticPropertyTable (part 3: JSLocation::putDelegate)
authorbarraclough@apple.com <barraclough@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 14 Jun 2016 06:17:05 +0000 (06:17 +0000)
committerbarraclough@apple.com <barraclough@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 14 Jun 2016 06:17:05 +0000 (06:17 +0000)
commitc78c227b43898a1779a71447f57125571e317a80
treead57cc61437034576d8db7716b4ebfb1e9cc1319
parent50f4a4ed831ea37651994e557db36adf4440c39c
Remove hasStaticPropertyTable (part 3: JSLocation::putDelegate)
https://bugs.webkit.org/show_bug.cgi?id=158431

Reviewed by Geoff Garen.

All uses of hasStaticPropertyTable flag generated by bindings are wrong.

JSLocation::putDelegate checks the static property table redundantly.

In the case of same origin access, if the property is not in the static
table the method will call JSObject::put and return true (indicating the
delegate handled the put). If the property is in the static table, the
method will return false (indicating the the delegate did not handle the
access) - in which case the calling function will call JSObject::put.
Checking for the property in the static table is redundant - same origin
access does not require any special handling, and should just always
return false & let the caller handle the put.

In the case of cross origin access, if the property is not in the static
table we return true (indicating the access was handled, and silently
blocking it). If it is a static property, we check the name, and if the
name is not 'href' we also return true, silently blocking. In the case
that the name is 'href' we'll return false, indicating to the caller
that the access was not handled by the delegate, resulting in it taking
place. The additional check of the static table is redundant, since we
only have special behaviour in the case of 'href'. (Moreover it is
unnecesszarily fragile, since if we made a change such that 'href' was no
longer implemented as a static property with would fail.)

- for same origin, always return false.
- for cross origin, return false for 'href', otherwise return true.

* bindings/js/JSLocationCustom.cpp:
(WebCore::JSLocation::putDelegate):
    - restructure & remove static table check.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@202030 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebCore/ChangeLog
Source/WebCore/bindings/js/JSLocationCustom.cpp