Alexandre Julliard pushed to branch master at wine / wine

Commits:

7 changed files:

Changes:

  • dlls/mshtml/htmlevent.c
    ... ... @@ -504,7 +504,7 @@ static HRESULT WINAPI HTMLEventObj_put_cancelBubble(IHTMLEventObj *iface, VARIAN
    504 504
         TRACE("(%p)->(%x)\n", This, v);
    
    505 505
     
    
    506 506
         if(This->event)
    
    507
    -        IDOMEvent_stopPropagation(&This->event->IDOMEvent_iface);
    
    507
    +        IDOMEvent_put_cancelBubble(&This->event->IDOMEvent_iface, v);
    
    508 508
         return S_OK;
    
    509 509
     }
    
    510 510
     
    
    ... ... @@ -514,8 +514,7 @@ static HRESULT WINAPI HTMLEventObj_get_cancelBubble(IHTMLEventObj *iface, VARIAN
    514 514
     
    
    515 515
         TRACE("(%p)->(%p)\n", This, p);
    
    516 516
     
    
    517
    -    *p = variant_bool(This->event && This->event->stop_propagation);
    
    518
    -    return S_OK;
    
    517
    +    return IDOMEvent_get_cancelBubble(&This->event->IDOMEvent_iface, p);
    
    519 518
     }
    
    520 519
     
    
    521 520
     static HRESULT WINAPI HTMLEventObj_get_fromElement(IHTMLEventObj *iface, IHTMLElement **p)
    
    ... ... @@ -2013,7 +2012,6 @@ static HRESULT WINAPI DOMEvent_stopPropagation(IDOMEvent *iface)
    2013 2012
         TRACE("(%p)\n", This);
    
    2014 2013
     
    
    2015 2014
         This->stop_propagation = TRUE;
    
    2016
    -    nsIDOMEvent_StopPropagation(This->nsevent);
    
    2017 2015
         return S_OK;
    
    2018 2016
     }
    
    2019 2017
     
    
    ... ... @@ -2041,15 +2039,25 @@ static HRESULT WINAPI DOMEvent_get_isTrusted(IDOMEvent *iface, VARIANT_BOOL *p)
    2041 2039
     static HRESULT WINAPI DOMEvent_put_cancelBubble(IDOMEvent *iface, VARIANT_BOOL v)
    
    2042 2040
     {
    
    2043 2041
         DOMEvent *This = impl_from_IDOMEvent(iface);
    
    2044
    -    FIXME("(%p)->(%x)\n", This, v);
    
    2045
    -    return E_NOTIMPL;
    
    2042
    +
    
    2043
    +    TRACE("(%p)->(%x)\n", This, v);
    
    2044
    +
    
    2045
    +    if(This->phase < 2)
    
    2046
    +        return S_OK;
    
    2047
    +
    
    2048
    +    /* stop_immediate_propagation is not able to be interrupted, but native has a weird behavior. */
    
    2049
    +    This->stop_propagation = (v != VARIANT_FALSE);
    
    2050
    +    return S_OK;
    
    2046 2051
     }
    
    2047 2052
     
    
    2048 2053
     static HRESULT WINAPI DOMEvent_get_cancelBubble(IDOMEvent *iface, VARIANT_BOOL *p)
    
    2049 2054
     {
    
    2050 2055
         DOMEvent *This = impl_from_IDOMEvent(iface);
    
    2051
    -    FIXME("(%p)->(%p)\n", This, p);
    
    2052
    -    return E_NOTIMPL;
    
    2056
    +
    
    2057
    +    TRACE("(%p)->(%p)\n", This, p);
    
    2058
    +
    
    2059
    +    *p = variant_bool(This->stop_propagation);
    
    2060
    +    return S_OK;
    
    2053 2061
     }
    
    2054 2062
     
    
    2055 2063
     static HRESULT WINAPI DOMEvent_get_srcElement(IDOMEvent *iface, IHTMLElement **p)
    
    ... ... @@ -4257,8 +4265,7 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event, disp
    4257 4265
             }
    
    4258 4266
         }
    
    4259 4267
     
    
    4260
    -    for(listener = listeners; !event->stop_immediate_propagation
    
    4261
    -            && listener < listeners + listeners_cnt; listener++) {
    
    4268
    +    for(listener = listeners; listener < listeners + listeners_cnt; listener++) {
    
    4262 4269
             if(listener->type != LISTENER_TYPE_ATTACHED) {
    
    4263 4270
                 DISPID named_arg = DISPID_THIS;
    
    4264 4271
                 VARIANTARG args[2];
    
    ... ... @@ -4321,6 +4328,9 @@ static void call_event_handlers(EventTarget *event_target, DOMEvent *event, disp
    4321 4328
                     WARN("%p %s attached <<< %08lx\n", event_target, debugstr_w(event->type), hres);
    
    4322 4329
                 }
    
    4323 4330
             }
    
    4331
    +
    
    4332
    +        if(event->stop_immediate_propagation)
    
    4333
    +            break;
    
    4324 4334
         }
    
    4325 4335
     
    
    4326 4336
         for(listener = listeners; listener < listeners + listeners_cnt; listener++)
    
    ... ... @@ -4469,6 +4479,9 @@ static HRESULT dispatch_event_object(EventTarget *event_target, DOMEvent *event,
    4469 4479
                 call_event_handlers(target_chain[i], event, dispatch_mode);
    
    4470 4480
         }
    
    4471 4481
     
    
    4482
    +    if(event->stop_propagation)
    
    4483
    +        nsIDOMEvent_StopPropagation(event->nsevent);
    
    4484
    +
    
    4472 4485
         if(r)
    
    4473 4486
             *r = variant_bool(!event->prevent_default);
    
    4474 4487
     
    

  • dlls/mshtml/htmlevent.h
    ... ... @@ -83,16 +83,16 @@ typedef struct DOMEvent {
    83 83
         EventTarget *target;
    
    84 84
         EventTarget *current_target;
    
    85 85
         ULONGLONG time_stamp;
    
    86
    -    BOOL bubbles;
    
    87
    -    BOOL cancelable;
    
    88
    -    BOOL prevent_default;
    
    89
    -    BOOL stop_propagation;
    
    90
    -    BOOL stop_immediate_propagation;
    
    91
    -    BOOL trusted;
    
    86
    +    unsigned bubbles : 1;
    
    87
    +    unsigned cancelable : 1;
    
    88
    +    unsigned prevent_default : 1;
    
    89
    +    unsigned stop_propagation : 1;
    
    90
    +    unsigned stop_immediate_propagation : 1;
    
    91
    +    unsigned trusted : 1;
    
    92
    +    unsigned no_event_obj : 1;
    
    92 93
         DOM_EVENT_PHASE phase;
    
    93 94
     
    
    94 95
         IHTMLEventObj *event_obj;
    
    95
    -    BOOL no_event_obj;
    
    96 96
     } DOMEvent;
    
    97 97
     
    
    98 98
     const WCHAR *get_event_name(eventid_t);
    

  • dlls/mshtml/htmlstyle.c
    ... ... @@ -119,6 +119,17 @@ typedef struct {
    119 119
     } style_tbl_entry_t;
    
    120 120
     
    
    121 121
     static const style_tbl_entry_t style_tbl[] = {
    
    122
    +    {
    
    123
    +        L"-ms-transform",
    
    124
    +        DISPID_IHTMLCSSSTYLEDECLARATION_MSTRANSFORM,
    
    125
    +        DISPID_UNKNOWN
    
    126
    +    },
    
    127
    +    {
    
    128
    +        L"-ms-transition",
    
    129
    +        DISPID_IHTMLCSSSTYLEDECLARATION2_MSTRANSITION,
    
    130
    +        DISPID_UNKNOWN,
    
    131
    +        ATTR_COMPAT_IE10
    
    132
    +    },
    
    122 133
         {
    
    123 134
             L"animation",
    
    124 135
             DISPID_IHTMLCSSSTYLEDECLARATION2_ANIMATION,
    
    ... ... @@ -318,7 +329,7 @@ static const style_tbl_entry_t style_tbl[] = {
    318 329
             ATTR_FIX_PX
    
    319 330
         },
    
    320 331
         {
    
    321
    -        L"-moz-box-sizing",
    
    332
    +        L"box-sizing",
    
    322 333
             DISPID_IHTMLCSSSTYLEDECLARATION_BOXSIZING,
    
    323 334
             DISPID_A_BOXSIZING
    
    324 335
         },
    
    ... ... @@ -702,6 +713,18 @@ static const style_tbl_entry_t style_tbl[] = {
    702 713
     
    
    703 714
     C_ASSERT(ARRAY_SIZE(style_tbl) == STYLEID_MAX_VALUE);
    
    704 715
     
    
    716
    +static const WCHAR *get_style_nsname(const style_tbl_entry_t *style_entry)
    
    717
    +{
    
    718
    +    if(style_entry->name[0] == '-')
    
    719
    +        return style_entry->name + sizeof("-ms-")-1;
    
    720
    +    return style_entry->name;
    
    721
    +}
    
    722
    +
    
    723
    +static const WCHAR *get_style_prop_nsname(const style_tbl_entry_t *style_entry, const WCHAR *orig_name)
    
    724
    +{
    
    725
    +    return style_entry ? get_style_nsname(style_entry) : orig_name;
    
    726
    +}
    
    727
    +
    
    705 728
     static const style_tbl_entry_t *lookup_style_tbl(CSSStyle *style, const WCHAR *name)
    
    706 729
     {
    
    707 730
         int c, i, min = 0, max = ARRAY_SIZE(style_tbl)-1;
    
    ... ... @@ -788,7 +811,7 @@ static HRESULT set_nsstyle_property(nsIDOMCSSStyleDeclaration *nsstyle, styleid_
    788 811
         nsAString str_name, str_empty;
    
    789 812
         nsresult nsres;
    
    790 813
     
    
    791
    -    nsAString_InitDepend(&str_name, style_tbl[sid].name);
    
    814
    +    nsAString_InitDepend(&str_name, get_style_nsname(&style_tbl[sid]));
    
    792 815
         nsAString_InitDepend(&str_empty, L"");
    
    793 816
         nsres = nsIDOMCSSStyleDeclaration_SetProperty(nsstyle, &str_name, value, &str_empty);
    
    794 817
         nsAString_Finish(&str_name);
    
    ... ... @@ -867,7 +890,7 @@ static HRESULT get_nsstyle_attr_nsval(nsIDOMCSSStyleDeclaration *nsstyle, stylei
    867 890
         nsAString str_name;
    
    868 891
         nsresult nsres;
    
    869 892
     
    
    870
    -    nsAString_InitDepend(&str_name, style_tbl[sid].name);
    
    893
    +    nsAString_InitDepend(&str_name, get_style_nsname(&style_tbl[sid]));
    
    871 894
         nsres = nsIDOMCSSStyleDeclaration_GetPropertyValue(nsstyle, &str_name, value);
    
    872 895
         nsAString_Finish(&str_name);
    
    873 896
         if(NS_FAILED(nsres))
    
    ... ... @@ -2946,7 +2969,7 @@ static HRESULT WINAPI HTMLStyle_removeAttribute(IHTMLStyle *iface, BSTR strAttri
    2946 2969
             return S_OK;
    
    2947 2970
         }
    
    2948 2971
     
    
    2949
    -    nsAString_InitDepend(&name_str, style_entry->name);
    
    2972
    +    nsAString_InitDepend(&name_str, get_style_nsname(style_entry));
    
    2950 2973
         nsAString_Init(&ret_str, NULL);
    
    2951 2974
         nsres = nsIDOMCSSStyleDeclaration_RemoveProperty(This->css_style.nsstyle, &name_str, &ret_str);
    
    2952 2975
         if(NS_SUCCEEDED(nsres)) {
    
    ... ... @@ -4443,7 +4466,7 @@ static HRESULT WINAPI HTMLCSSStyleDeclaration_getPropertyValue(IHTMLCSSStyleDecl
    4443 4466
         TRACE("(%p)->(%s %p)\n", This, debugstr_w(name), value);
    
    4444 4467
     
    
    4445 4468
         style_entry = lookup_style_tbl(This, name);
    
    4446
    -    nsAString_InitDepend(&name_str, style_entry ? style_entry->name : name);
    
    4469
    +    nsAString_InitDepend(&name_str, get_style_prop_nsname(style_entry, name));
    
    4447 4470
         nsAString_InitDepend(&value_str, NULL);
    
    4448 4471
         nsres = nsIDOMCSSStyleDeclaration_GetPropertyValue(This->nsstyle, &name_str, &value_str);
    
    4449 4472
         nsAString_Finish(&name_str);
    
    ... ... @@ -4467,7 +4490,7 @@ static HRESULT WINAPI HTMLCSSStyleDeclaration_removeProperty(IHTMLCSSStyleDeclar
    4467 4490
         TRACE("(%p)->(%s %p)\n", This, debugstr_w(bstrPropertyName), pbstrPropertyValue);
    
    4468 4491
     
    
    4469 4492
         style_entry = lookup_style_tbl(This, bstrPropertyName);
    
    4470
    -    nsAString_InitDepend(&name_str, style_entry ? style_entry->name : bstrPropertyName);
    
    4493
    +    nsAString_InitDepend(&name_str, get_style_prop_nsname(style_entry, bstrPropertyName));
    
    4471 4494
         nsAString_Init(&ret_str, NULL);
    
    4472 4495
         nsres = nsIDOMCSSStyleDeclaration_RemoveProperty(This->nsstyle, &name_str, &ret_str);
    
    4473 4496
         nsAString_Finish(&name_str);
    
    ... ... @@ -4500,7 +4523,7 @@ static HRESULT WINAPI HTMLCSSStyleDeclaration_setProperty(IHTMLCSSStyleDeclarati
    4500 4523
             nsAString_InitDepend(&priority_str, NULL);
    
    4501 4524
         }
    
    4502 4525
     
    
    4503
    -    nsAString_InitDepend(&name_str, style_entry ? style_entry->name : name);
    
    4526
    +    nsAString_InitDepend(&name_str, get_style_prop_nsname(style_entry, name));
    
    4504 4527
         nsres = nsIDOMCSSStyleDeclaration_SetProperty(This->nsstyle, &name_str, &value_str, &priority_str);
    
    4505 4528
         nsAString_Finish(&name_str);
    
    4506 4529
         nsAString_Finish(&value_str);
    
    ... ... @@ -7262,15 +7285,19 @@ static HRESULT WINAPI HTMLCSSStyleDeclaration_get_boxShadow(IHTMLCSSStyleDeclara
    7262 7285
     static HRESULT WINAPI HTMLCSSStyleDeclaration_put_msTransform(IHTMLCSSStyleDeclaration *iface, BSTR v)
    
    7263 7286
     {
    
    7264 7287
         CSSStyle *This = impl_from_IHTMLCSSStyleDeclaration(iface);
    
    7265
    -    FIXME("(%p)->(%s)\n", This, debugstr_w(v));
    
    7266
    -    return E_NOTIMPL;
    
    7288
    +
    
    7289
    +    TRACE("(%p)->(%s)\n", This, debugstr_w(v));
    
    7290
    +
    
    7291
    +    return set_style_property(This, STYLEID_MSTRANSFORM, v);
    
    7267 7292
     }
    
    7268 7293
     
    
    7269 7294
     static HRESULT WINAPI HTMLCSSStyleDeclaration_get_msTransform(IHTMLCSSStyleDeclaration *iface, BSTR *p)
    
    7270 7295
     {
    
    7271 7296
         CSSStyle *This = impl_from_IHTMLCSSStyleDeclaration(iface);
    
    7272
    -    FIXME("(%p)->(%p)\n", This, p);
    
    7273
    -    return E_NOTIMPL;
    
    7297
    +
    
    7298
    +    TRACE("(%p)->(%p)\n", This, p);
    
    7299
    +
    
    7300
    +    return get_style_property(This, STYLEID_MSTRANSFORM, p);
    
    7274 7301
     }
    
    7275 7302
     
    
    7276 7303
     static HRESULT WINAPI HTMLCSSStyleDeclaration_put_msTransformOrigin(IHTMLCSSStyleDeclaration *iface, BSTR v)
    
    ... ... @@ -8760,15 +8787,19 @@ static HRESULT WINAPI HTMLCSSStyleDeclaration2_get_msTransitionDelay(IHTMLCSSSty
    8760 8787
     static HRESULT WINAPI HTMLCSSStyleDeclaration2_put_msTransition(IHTMLCSSStyleDeclaration2 *iface, BSTR v)
    
    8761 8788
     {
    
    8762 8789
         CSSStyle *This = impl_from_IHTMLCSSStyleDeclaration2(iface);
    
    8763
    -    FIXME("(%p)->(%s)\n", This, debugstr_w(v));
    
    8764
    -    return E_NOTIMPL;
    
    8790
    +
    
    8791
    +    TRACE("(%p)->(%s)\n", This, debugstr_w(v));
    
    8792
    +
    
    8793
    +    return set_style_property(This, STYLEID_MSTRANSITION, v);
    
    8765 8794
     }
    
    8766 8795
     
    
    8767 8796
     static HRESULT WINAPI HTMLCSSStyleDeclaration2_get_msTransition(IHTMLCSSStyleDeclaration2 *iface, BSTR *p)
    
    8768 8797
     {
    
    8769 8798
         CSSStyle *This = impl_from_IHTMLCSSStyleDeclaration2(iface);
    
    8770
    -    FIXME("(%p)->(%p)\n", This, p);
    
    8771
    -    return E_NOTIMPL;
    
    8799
    +
    
    8800
    +    TRACE("(%p)->(%p)\n", This, p);
    
    8801
    +
    
    8802
    +    return get_style_property(This, STYLEID_MSTRANSITION, p);
    
    8772 8803
     }
    
    8773 8804
     
    
    8774 8805
     static HRESULT WINAPI HTMLCSSStyleDeclaration2_put_msTouchAction(IHTMLCSSStyleDeclaration2 *iface, BSTR v)
    

  • dlls/mshtml/htmlstyle.h
    ... ... @@ -40,6 +40,8 @@ struct HTMLStyle {
    40 40
     
    
    41 41
     /* NOTE: Make sure to keep in sync with style_tbl in htmlstyle.c */
    
    42 42
     typedef enum {
    
    43
    +    STYLEID_MSTRANSFORM,
    
    44
    +    STYLEID_MSTRANSITION,
    
    43 45
         STYLEID_ANIMATION,
    
    44 46
         STYLEID_ANIMATION_NAME,
    
    45 47
         STYLEID_BACKGROUND,
    

  • dlls/mshtml/tests/documentmode.js
    ... ... @@ -660,60 +660,42 @@ sync_test("xhr open", function() {
    660 660
     });
    
    661 661
     
    
    662 662
     sync_test("style_props", function() {
    
    663
    -    var style = document.body.style;
    
    663
    +    var style = document.body.style, currentStyle = document.body.currentStyle, computedStyle = window.getComputedStyle ? window.getComputedStyle(document.body) : undefined;
    
    664 664
     
    
    665
    -    function test_exposed(prop, expect) {
    
    666
    -        if(expect)
    
    665
    +    function test_exposed(prop, expect_style, expect_currentStyle, expect_computedStyle) {
    
    666
    +        if(expect_style)
    
    667 667
                 ok(prop in style, prop + " not found in style object.");
    
    668 668
             else
    
    669 669
                 ok(!(prop in style), prop + " found in style object.");
    
    670
    +        if(expect_currentStyle)
    
    671
    +            ok(prop in currentStyle, prop + " not found in currentStyle object.");
    
    672
    +        else
    
    673
    +            ok(!(prop in currentStyle), prop + " found in currentStyle object.");
    
    674
    +        if(computedStyle) {
    
    675
    +            if(expect_computedStyle)
    
    676
    +                ok(prop in computedStyle, prop + " not found in computedStyle object.");
    
    677
    +            else
    
    678
    +                ok(!(prop in computedStyle), prop + " found in computedStyle object.");
    
    679
    +        }
    
    670 680
         }
    
    671 681
     
    
    672 682
         var v = document.documentMode;
    
    673 683
     
    
    674
    -    test_exposed("removeAttribute", true);
    
    675
    -    test_exposed("zIndex", true);
    
    676
    -    test_exposed("z-index", true);
    
    677
    -    test_exposed("filter", true);
    
    678
    -    test_exposed("pixelTop", true);
    
    679
    -    test_exposed("float", true);
    
    680
    -    test_exposed("css-float", false);
    
    681
    -    test_exposed("style-float", false);
    
    682
    -    test_exposed("setProperty", v >= 9);
    
    683
    -    test_exposed("removeProperty", v >= 9);
    
    684
    -    test_exposed("background-clip", v >= 9);
    
    685
    -    test_exposed("msTransform", v >= 9);
    
    686
    -    test_exposed("transform", v >= 10);
    
    687
    -
    
    688
    -    style = document.body.currentStyle;
    
    689
    -
    
    690
    -    test_exposed("zIndex", true);
    
    691
    -    test_exposed("z-index", true);
    
    692
    -    test_exposed("filter", true);
    
    693
    -    test_exposed("pixelTop", false);
    
    694
    -    test_exposed("float", true);
    
    695
    -    test_exposed("css-float", false);
    
    696
    -    test_exposed("style-float", false);
    
    697
    -    test_exposed("setProperty", v >= 9);
    
    698
    -    test_exposed("removeProperty", v >= 9);
    
    699
    -    test_exposed("background-clip", v >= 9);
    
    700
    -    test_exposed("transform", v >= 10);
    
    701
    -
    
    702
    -    if(window.getComputedStyle) {
    
    703
    -        style = window.getComputedStyle(document.body);
    
    704
    -
    
    705
    -        test_exposed("removeAttribute", false);
    
    706
    -        test_exposed("zIndex", true);
    
    707
    -        test_exposed("z-index", true);
    
    708
    -        test_exposed("pixelTop", false);
    
    709
    -        test_exposed("float", true);
    
    710
    -        test_exposed("css-float", false);
    
    711
    -        test_exposed("style-float", false);
    
    712
    -        test_exposed("setProperty", v >= 9);
    
    713
    -        test_exposed("removeProperty", v >= 9);
    
    714
    -        test_exposed("background-clip", v >= 9);
    
    715
    -        test_exposed("transform", v >= 10);
    
    716
    -    }
    
    684
    +    test_exposed("removeAttribute", true, broken(true) ? v >= 9 : false /* todo_wine */, false);
    
    685
    +    test_exposed("zIndex", true, true, true);
    
    686
    +    test_exposed("z-index", true, true, true);
    
    687
    +    test_exposed("filter", true, true, broken(true) ? v >= 10 : v >= 9 /* todo_wine */);
    
    688
    +    test_exposed("pixelTop", true, false, false);
    
    689
    +    test_exposed("float", true, true, true);
    
    690
    +    test_exposed("css-float", false, false, false);
    
    691
    +    test_exposed("style-float", false, false, false);
    
    692
    +    test_exposed("setProperty", v >= 9, v >= 9, v >= 9);
    
    693
    +    test_exposed("removeProperty", v >= 9, v >= 9, v >= 9);
    
    694
    +    test_exposed("background-clip", v >= 9, v >= 9, v >= 9);
    
    695
    +    test_exposed("msTransform", v >= 9, v >= 9, v >= 9);
    
    696
    +    test_exposed("msTransition", v >= 10, v >= 10, v >= 10);
    
    697
    +    test_exposed("transform", v >= 10, v >= 10, v >= 10);
    
    698
    +    test_exposed("transition", v >= 10, v >= 10, v >= 10);
    
    717 699
     });
    
    718 700
     
    
    719 701
     sync_test("createElement_inline_attr", function() {
    

  • dlls/mshtml/tests/dom.js
    ... ... @@ -399,6 +399,20 @@ sync_test("style_properties", function() {
    399 399
         ok(val === "", "removeProperty() returned " + val);
    
    400 400
         ok(style.testVal === "test", "testVal = " + style.testVal);
    
    401 401
     
    
    402
    +    val = style.getPropertyValue("testVal");
    
    403
    +    ok(val === "", 'style.getPropertyValue("testVal") = ' + val);
    
    404
    +    ok(style.testVal === "test", "testVal = " + style.testVal);
    
    405
    +
    
    406
    +    style.setProperty("testVal", "1px");
    
    407
    +    val = style.getPropertyValue("testVal");
    
    408
    +    ok(val === "", 'style.getPropertyValue("testVal") = ' + val);
    
    409
    +    ok(style.testVal === "test", "testVal = " + style.testVal);
    
    410
    +
    
    411
    +    style.setProperty("test", "1px");
    
    412
    +    val = style.getPropertyValue("test");
    
    413
    +    ok(val === "", 'style.getPropertyValue("test") = ' + val);
    
    414
    +    ok(!("test" in style), "test in style");
    
    415
    +
    
    402 416
         style["z-index"] = 1;
    
    403 417
         ok(style.zIndex === 1, "zIndex = " + style.zIndex);
    
    404 418
         ok(style["z-index"] === 1, "z-index = " + style["z-index"]);
    
    ... ... @@ -458,6 +472,21 @@ sync_test("style_properties", function() {
    458 472
         ok(computed_style.zIndex === 4, "computed_style.zIndex = " + computed_style.zIndex);
    
    459 473
     
    
    460 474
         window.getComputedStyle(elem, null);
    
    475
    +
    
    476
    +    /* ms* prefixed styles alias */
    
    477
    +    var list = [
    
    478
    +        [ "transform", "translate(5px, 5px)" ],
    
    479
    +        [ "transition", "background-color 0.5s linear 0.1s" ]
    
    480
    +    ];
    
    481
    +    for(var i = 0; i < list.length; i++) {
    
    482
    +        var s = list[i][0], v = list[i][1], ms = "ms" + s[0].toUpperCase() + s.substring(1);
    
    483
    +        style[s] = v;
    
    484
    +        ok(style[s] === v, "style." + s + " = " + style[s] + ", expected " + v);
    
    485
    +        ok(style[ms] === v, "style." + ms + " = " + style[ms] + ", expected " + v);
    
    486
    +        elem.style[ms] = v;
    
    487
    +        ok(elem.style[s] === v, "elem.style." + s + " = " + elem.style[s] + ", expected " + v);
    
    488
    +        ok(elem.style[ms] === v, "elem.style." + ms + " = " + elem.style[ms] + ", expected " + v);
    
    489
    +    }
    
    461 490
     });
    
    462 491
     
    
    463 492
     sync_test("stylesheets", function() {
    

  • dlls/mshtml/tests/events.js
    ... ... @@ -255,63 +255,150 @@ sync_test("stop_propagation", function() {
    255 255
     
    
    256 256
         function stop_propagation(e) {
    
    257 257
             calls += "stop,";
    
    258
    +        ok(e.cancelBubble === (e.cancelBubble_winetest ? true : false), "cancelBubble before stopPropagation = " + e.cancelBubble);
    
    258 259
             e.stopPropagation();
    
    260
    +        e.cancelBubble_winetest = true;
    
    261
    +        ok(e.cancelBubble === true, "cancelBubble after stopPropagation = " + e.cancelBubble);
    
    259 262
             ok(e.bubbles === true, "bubbles = " + e.bubbles);
    
    260 263
             ok(e.defaultPrevented === false, "defaultPrevented = " + e.defaultPrevented);
    
    261 264
         }
    
    262 265
     
    
    263 266
         function stop_immediate_propagation(e) {
    
    264 267
             calls += "immediateStop,";
    
    268
    +        ok(e.cancelBubble === (e.cancelBubble_winetest ? true : false), "cancelBubble before stopImmediatePropagation = " + e.cancelBubble);
    
    265 269
             e.stopImmediatePropagation();
    
    270
    +        e.cancelBubble_winetest = true;
    
    271
    +        ok(e.cancelBubble === true, "cancelBubble after stopImmediatePropagation = " + e.cancelBubble);
    
    266 272
             ok(e.bubbles === true, "bubbles = " + e.bubbles);
    
    267 273
             ok(e.cancelable === true, "cancelable = " + e.cancelable);
    
    268 274
             ok(e.defaultPrevented === false, "defaultPrevented = " + e.defaultPrevented);
    
    269 275
         }
    
    270 276
     
    
    271
    -    div1.addEventListener("click", stop_immediate_propagation, true);
    
    277
    +    function stop_immediate_propagation_cancel_bubble_false(e) {
    
    278
    +        calls += "immediateStop and cancelBubble(false),";
    
    279
    +        ok(e.cancelBubble === (e.cancelBubble_winetest ? true : false), "cancelBubble before stopImmediatePropagation = " + e.cancelBubble);
    
    280
    +        e.stopImmediatePropagation();
    
    281
    +        e.cancelBubble = false;
    
    282
    +        e.cancelBubble_winetest = e.eventPhase < 2 ? true : false;
    
    283
    +        ok(e.cancelBubble === (e.cancelBubble_winetest ? true : false), "cancelBubble after stopImmediatePropagation and setting cancelBubble to false = " + e.cancelBubble);
    
    284
    +        ok(e.bubbles === true, "bubbles = " + e.bubbles);
    
    285
    +        ok(e.cancelable === true, "cancelable = " + e.cancelable);
    
    286
    +        ok(e.defaultPrevented === false, "defaultPrevented = " + e.defaultPrevented);
    
    287
    +    }
    
    288
    +
    
    289
    +    function cancel_bubble_impl(i) {
    
    290
    +        return function(e) {
    
    291
    +            calls += "cancelBubble["+i+"],";
    
    292
    +            ok(e.cancelBubble === (e.cancelBubble_winetest ? true : false), "cancelBubble before setting cancelBubble = " + e.cancelBubble);
    
    293
    +            e.cancelBubble = true;
    
    294
    +            if(e.eventPhase < 2)
    
    295
    +                ok(e.cancelBubble === (e.cancelBubble_winetest ? true : false), "cancelBubble after setting cancelBubble during capture phase = " + e.cancelBubble);
    
    296
    +            else
    
    297
    +                ok(e.cancelBubble === true, "cancelBubble after setting cancelBubble during bubble phase = " + e.cancelBubble);
    
    298
    +            e.cancelBubble_winetest = e.cancelBubble;
    
    299
    +            ok(e.bubbles === true, "bubbles = " + e.bubbles);
    
    300
    +            ok(e.cancelable === true, "cancelable = " + e.cancelable);
    
    301
    +            ok(e.defaultPrevented === false, "defaultPrevented = " + e.defaultPrevented);
    
    302
    +        }
    
    303
    +    }
    
    304
    +
    
    305
    +    var cancel_bubble = [];
    
    306
    +    for(var i = 0; i < 4; i++)
    
    307
    +        cancel_bubble.push(cancel_bubble_impl(i));
    
    308
    +
    
    309
    +    function cancel_bubble_false(e) {
    
    310
    +        calls += "cancelBubble(false),";
    
    311
    +        ok(e.cancelBubble === (e.cancelBubble_winetest ? true : false), "cancelBubble before setting cancelBubble to false = " + e.cancelBubble);
    
    312
    +        e.cancelBubble = false;
    
    313
    +        if(e.cancelBubble_winetest && e.eventPhase !== 1)
    
    314
    +            delete e.cancelBubble_winetest;
    
    315
    +        ok(e.cancelBubble === (e.cancelBubble_winetest ? true : false), "cancelBubble after setting cancelBubble to false = " + e.cancelBubble);
    
    316
    +        ok(e.bubbles === true, "bubbles = " + e.bubbles);
    
    317
    +        ok(e.cancelable === true, "cancelable = " + e.cancelable);
    
    318
    +        ok(e.defaultPrevented === false, "defaultPrevented = " + e.defaultPrevented);
    
    319
    +    }
    
    320
    +
    
    321
    +    div1.addEventListener("click", stop_immediate_propagation_cancel_bubble_false, true);
    
    272 322
         div1.addEventListener("click", stop_propagation, true);
    
    323
    +    div1.addEventListener("click", cancel_bubble[0], true);
    
    324
    +    div1.addEventListener("click", cancel_bubble_false, true);
    
    273 325
         div1.addEventListener("click", record_call("div1.click(capture)"), true);
    
    274 326
     
    
    275 327
         div2.addEventListener("click", stop_immediate_propagation, true);
    
    328
    +    div2.addEventListener("click", cancel_bubble[1], true);
    
    276 329
         div2.addEventListener("click", stop_propagation, true);
    
    277 330
         div2.addEventListener("click", record_call("div2.click(capture)"), true);
    
    278 331
     
    
    332
    +    div1.addEventListener("click", cancel_bubble[2], false);
    
    333
    +    div1.addEventListener("click", cancel_bubble_false, false);
    
    279 334
         div1.addEventListener("click", stop_propagation, false);
    
    280 335
         div1.addEventListener("click", record_call("div1.click(bubble)"), false);
    
    281 336
     
    
    337
    +    div2.addEventListener("click", stop_immediate_propagation_cancel_bubble_false, false);
    
    282 338
         div2.addEventListener("click", stop_propagation, false);
    
    339
    +    div2.addEventListener("click", cancel_bubble[3], false);
    
    340
    +    div2.addEventListener("click", cancel_bubble_false, false);
    
    283 341
         div2.addEventListener("click", record_call("div2.click(bubble)"), false);
    
    284 342
     
    
    285 343
         calls = "";
    
    286 344
         div2.click();
    
    287
    -    ok(calls === "immediateStop,", "calls = " + calls);
    
    345
    +    ok(calls === "immediateStop and cancelBubble(false),", "calls = " + calls);
    
    288 346
     
    
    289
    -    div1.removeEventListener("click", stop_immediate_propagation, true);
    
    347
    +    div1.removeEventListener("click", stop_immediate_propagation_cancel_bubble_false, true);
    
    290 348
         calls = "";
    
    291 349
         div2.click();
    
    292
    -    ok(calls === "stop,div1.click(capture),", "calls = " + calls);
    
    350
    +    ok(calls === "stop,cancelBubble[0],cancelBubble(false),div1.click(capture),", "calls = " + calls);
    
    293 351
     
    
    294 352
         div1.removeEventListener("click", stop_propagation, true);
    
    295 353
         calls = "";
    
    296 354
         div2.click();
    
    297
    -    ok(calls === "div1.click(capture),immediateStop,", "calls = " + calls);
    
    355
    +    ok(calls === "cancelBubble[0],cancelBubble(false),div1.click(capture),immediateStop,", "calls = " + calls);
    
    356
    +
    
    357
    +    div1.removeEventListener("click", cancel_bubble[0], true);
    
    358
    +    calls = "";
    
    359
    +    div2.click();
    
    360
    +    ok(calls === "cancelBubble(false),div1.click(capture),immediateStop,", "calls = " + calls);
    
    298 361
     
    
    299 362
         div2.removeEventListener("click", stop_immediate_propagation, true);
    
    300 363
         calls = "";
    
    301 364
         div2.click();
    
    302
    -    ok(calls === "div1.click(capture),stop,div2.click(capture),stop,div2.click(bubble),",
    
    365
    +    ok(calls === "cancelBubble(false),div1.click(capture),cancelBubble[1],stop,div2.click(capture),immediateStop and cancelBubble(false),cancelBubble[2],",  // weird native behavior
    
    366
    +       "calls = " + calls);
    
    367
    +
    
    368
    +    div2.removeEventListener("click", stop_immediate_propagation_cancel_bubble_false, false);
    
    369
    +    calls = "";
    
    370
    +    div2.click();
    
    371
    +    ok(calls === "cancelBubble(false),div1.click(capture),cancelBubble[1],stop,div2.click(capture),stop,cancelBubble[3],cancelBubble(false),div2.click(bubble),cancelBubble[2],cancelBubble(false),stop,div1.click(bubble),",
    
    372
    +       "calls = " + calls);
    
    373
    +
    
    374
    +    div2.removeEventListener("click", cancel_bubble_false, false);
    
    375
    +    calls = "";
    
    376
    +    div2.click();
    
    377
    +    ok(calls === "cancelBubble(false),div1.click(capture),cancelBubble[1],stop,div2.click(capture),stop,cancelBubble[3],div2.click(bubble),",
    
    378
    +       "calls = " + calls);
    
    379
    +
    
    380
    +    div2.removeEventListener("click", cancel_bubble[1], true);
    
    381
    +    calls = "";
    
    382
    +    div2.click();
    
    383
    +    ok(calls === "cancelBubble(false),div1.click(capture),stop,div2.click(capture),stop,cancelBubble[3],div2.click(bubble),",
    
    303 384
            "calls = " + calls);
    
    304 385
     
    
    305 386
         div2.removeEventListener("click", stop_propagation, true);
    
    306 387
         calls = "";
    
    307 388
         div2.click();
    
    308
    -    ok(calls === "div1.click(capture),div2.click(capture),stop,div2.click(bubble),",
    
    389
    +    ok(calls === "cancelBubble(false),div1.click(capture),div2.click(capture),stop,cancelBubble[3],div2.click(bubble),",
    
    309 390
            "calls = " + calls);
    
    310 391
     
    
    311 392
         div2.removeEventListener("click", stop_propagation, false);
    
    312 393
         calls = "";
    
    313 394
         div2.click();
    
    314
    -    ok(calls === "div1.click(capture),div2.click(capture),div2.click(bubble),stop,div1.click(bubble),",
    
    395
    +    ok(calls === "cancelBubble(false),div1.click(capture),div2.click(capture),cancelBubble[3],div2.click(bubble),",
    
    396
    +       "calls = " + calls);
    
    397
    +
    
    398
    +    div2.removeEventListener("click", cancel_bubble[3], false);
    
    399
    +    calls = "";
    
    400
    +    div2.click();
    
    401
    +    ok(calls === "cancelBubble(false),div1.click(capture),div2.click(capture),div2.click(bubble),cancelBubble[2],cancelBubble(false),stop,div1.click(bubble),",
    
    315 402
            "calls = " + calls);
    
    316 403
     });
    
    317 404