Changeset 201810 in webkit


Ignore:
Timestamp:
Jun 8, 2016 10:32:48 AM (8 years ago)
Author:
commit-queue@webkit.org
Message:

[web-animations] Add Animatable, AnimationEffect, KeyframeEffect and Animation interface
https://bugs.webkit.org/show_bug.cgi?id=156096

Patch by Rawinder Singh <rawinder.singh-webkit@cisra.canon.com.au> on 2016-06-08
Reviewed by Dean Jackson.

Adds:
Source/JavaScriptCore:

  • Animatable interface and implementation of getAnimations in Element
  • Interface and implementation for Document getAnimations method.
  • AnimationEffect interface and class stub.
  • KeyframeEffect interface and constructor implementation.
  • 'Animation' interface, constructor and query methods for effect and timeline.
  • Remove runtime condition on Web animation interfaces (compile time flag is specified).
  • runtime/CommonIdentifiers.h:

Source/WebCore:

  • Animatable interface and implementation of getAnimations in Element
  • Interface and implementation for Document getAnimations method.
  • AnimationEffect interface and class stub.
  • KeyframeEffect interface and constructor implementation.
  • 'Animation' interface, constructor and query methods for effect and timeline.
  • Remove runtime condition on Web animation interfaces (compile time flag is specified).

Test: webanimations/Document.html

  • CMakeLists.txt:
  • DerivedSources.make:
  • PlatformGTK.cmake:
  • WebCore.xcodeproj/project.pbxproj:
  • animation/Animatable.idl: Copied from Source/WebCore/animation/DocumentAnimation.idl.
  • animation/AnimationEffect.cpp: Copied from Source/WebCore/animation/AnimationTimeline.cpp.

(WebCore::AnimationEffect::AnimationEffect):
(WebCore::AnimationEffect::~AnimationEffect):
(WebCore::AnimationEffect::setAnimation):
(WebCore::AnimationEffect::isCurrent):
(WebCore::AnimationEffect::isInEffect):

  • animation/AnimationEffect.h: Copied from Source/WebCore/animation/DocumentTimeline.cpp.
  • animation/AnimationEffect.idl: Copied from Source/WebCore/animation/AnimationTimeline.idl.
  • animation/AnimationTimeline.cpp:

(WebCore::AnimationTimeline::destroy):
(WebCore::AnimationTimeline::attachAnimation):
(WebCore::AnimationTimeline::detachAnimation):

  • animation/AnimationTimeline.h:
  • animation/AnimationTimeline.idl:
  • animation/DocumentAnimation.cpp:

(WebCore::DocumentAnimation::timeline):
(WebCore::DocumentAnimation::getAnimations):
(WebCore::DocumentAnimation::addAnimation):
(WebCore::DocumentAnimation::removeAnimation):

  • animation/DocumentAnimation.h:

(WebCore::DocumentAnimation::getAnimations):

  • animation/DocumentAnimation.idl:
  • animation/DocumentTimeline.cpp:

(WebCore::DocumentTimeline::create):
(WebCore::DocumentTimeline::DocumentTimeline):
(WebCore::DocumentTimeline::attach):
(WebCore::DocumentTimeline::detach):

  • animation/DocumentTimeline.h:
  • animation/DocumentTimeline.idl:
  • animation/KeyframeEffect.cpp: Copied from Source/WebCore/animation/DocumentTimeline.cpp.

(WebCore::KeyframeEffect::create):
(WebCore::KeyframeEffect::KeyframeEffect):
(WebCore::KeyframeEffect::~KeyframeEffect):

  • animation/KeyframeEffect.h: Copied from Source/WebCore/animation/DocumentTimeline.h.
  • animation/KeyframeEffect.idl: Copied from Source/WebCore/animation/AnimationTimeline.idl.
  • animation/WebAnimation.cpp: Copied from Source/WebCore/animation/DocumentAnimation.cpp.

(WebCore::WebAnimation::create):
(WebCore::WebAnimation::WebAnimation):
(WebCore::WebAnimation::~WebAnimation):

  • animation/WebAnimation.h: Copied from Source/WebCore/animation/DocumentAnimation.h.
  • animation/WebAnimation.idl: Copied from Source/WebCore/animation/DocumentTimeline.idl.
  • bindings/scripts/CodeGeneratorGObject.pm:
  • dom/Element.cpp:

(WebCore::Element::getAnimations):

  • dom/Element.h:
  • dom/Element.idl:

Source/WebKit/mac:

  • Setup interface for enabling runtime flag for Web animations through preferences.
  • WebView/WebPreferenceKeysPrivate.h:
  • WebView/WebPreferences.mm:

(+[WebPreferences initialize]):
(-[WebPreferences webAnimationsEnabled]):
(-[WebPreferences setWebAnimationsEnabled:]):

  • WebView/WebPreferencesPrivate.h:
  • WebView/WebView.mm:

(-[WebView _preferencesChanged:]):

LayoutTests:

  • Animatable interface and implementation of getAnimations in Element
  • Interface and implementation for Document getAnimations method.
  • AnimationEffect interface and class stub.
  • KeyframeEffect interface and constructor implementation.
  • 'Animation' interface, constructor and query methods for effect and timeline.
  • Remove runtime condition on Web animation interfaces (compile time flag is specified).
  • platform/gtk/js/dom/global-constructors-attributes-expected.txt:
  • platform/mac-yosemite/js/dom/global-constructors-attributes-expected.txt:
  • webanimations/Document-expected.txt: Added.
  • webanimations/Document.html: Added.
  • webanimations/script-tests/Document.js: Added.
Location:
trunk
Files:
5 added
28 edited
10 copied

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r201808 r201810  
     12016-06-08  Rawinder Singh  <rawinder.singh-webkit@cisra.canon.com.au>
     2
     3        [web-animations] Add Animatable, AnimationEffect, KeyframeEffect and Animation interface
     4        https://bugs.webkit.org/show_bug.cgi?id=156096
     5
     6        Reviewed by Dean Jackson.
     7
     8        Adds:
     9        - Animatable interface and implementation of getAnimations in Element
     10        - Interface and implementation for Document getAnimations method.
     11        - AnimationEffect interface and class stub.
     12        - KeyframeEffect interface and constructor implementation.
     13        - 'Animation' interface, constructor and query methods for effect and timeline.
     14        - Remove runtime condition on Web animation interfaces (compile time flag is specified).
     15
     16        * platform/gtk/js/dom/global-constructors-attributes-expected.txt:
     17        * platform/mac-yosemite/js/dom/global-constructors-attributes-expected.txt:
     18        * webanimations/Document-expected.txt: Added.
     19        * webanimations/Document.html: Added.
     20        * webanimations/script-tests/Document.js: Added.
     21
    1222016-06-08  Chris Dumez  <cdumez@apple.com>
    223
  • trunk/LayoutTests/platform/gtk/js/dom/global-constructors-attributes-expected.txt

    r199159 r201810  
    99PASS Object.getOwnPropertyDescriptor(global, 'AnalyserNode').enumerable is false
    1010PASS Object.getOwnPropertyDescriptor(global, 'AnalyserNode').configurable is true
     11PASS Object.getOwnPropertyDescriptor(global, 'Animation').value is Animation
     12PASS Object.getOwnPropertyDescriptor(global, 'Animation').hasOwnProperty('get') is false
     13PASS Object.getOwnPropertyDescriptor(global, 'Animation').hasOwnProperty('set') is false
     14PASS Object.getOwnPropertyDescriptor(global, 'Animation').enumerable is false
     15PASS Object.getOwnPropertyDescriptor(global, 'Animation').configurable is true
     16PASS Object.getOwnPropertyDescriptor(global, 'AnimationEffectReadOnly').value is AnimationEffectReadOnly
     17PASS Object.getOwnPropertyDescriptor(global, 'AnimationEffectReadOnly').hasOwnProperty('get') is false
     18PASS Object.getOwnPropertyDescriptor(global, 'AnimationEffectReadOnly').hasOwnProperty('set') is false
     19PASS Object.getOwnPropertyDescriptor(global, 'AnimationEffectReadOnly').enumerable is false
     20PASS Object.getOwnPropertyDescriptor(global, 'AnimationEffectReadOnly').configurable is true
    1121PASS Object.getOwnPropertyDescriptor(global, 'AnimationEvent').value is AnimationEvent
    1222PASS Object.getOwnPropertyDescriptor(global, 'AnimationEvent').hasOwnProperty('get') is false
     
    1424PASS Object.getOwnPropertyDescriptor(global, 'AnimationEvent').enumerable is false
    1525PASS Object.getOwnPropertyDescriptor(global, 'AnimationEvent').configurable is true
     26PASS Object.getOwnPropertyDescriptor(global, 'AnimationTimeline').value is AnimationTimeline
     27PASS Object.getOwnPropertyDescriptor(global, 'AnimationTimeline').hasOwnProperty('get') is false
     28PASS Object.getOwnPropertyDescriptor(global, 'AnimationTimeline').hasOwnProperty('set') is false
     29PASS Object.getOwnPropertyDescriptor(global, 'AnimationTimeline').enumerable is false
     30PASS Object.getOwnPropertyDescriptor(global, 'AnimationTimeline').configurable is true
    1631PASS Object.getOwnPropertyDescriptor(global, 'ApplicationCache').value is ApplicationCache
    1732PASS Object.getOwnPropertyDescriptor(global, 'ApplicationCache').hasOwnProperty('get') is false
     
    1934PASS Object.getOwnPropertyDescriptor(global, 'ApplicationCache').enumerable is false
    2035PASS Object.getOwnPropertyDescriptor(global, 'ApplicationCache').configurable is true
     36PASS Object.getOwnPropertyDescriptor(global, 'Array').value is Array
     37PASS Object.getOwnPropertyDescriptor(global, 'Array').hasOwnProperty('get') is false
     38PASS Object.getOwnPropertyDescriptor(global, 'Array').hasOwnProperty('set') is false
     39PASS Object.getOwnPropertyDescriptor(global, 'Array').enumerable is false
     40PASS Object.getOwnPropertyDescriptor(global, 'Array').configurable is true
     41PASS Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').value is ArrayBuffer
     42PASS Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').hasOwnProperty('get') is false
     43PASS Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').hasOwnProperty('set') is false
     44PASS Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').enumerable is false
     45PASS Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').configurable is true
    2146PASS Object.getOwnPropertyDescriptor(global, 'Attr').value is Attr
    2247PASS Object.getOwnPropertyDescriptor(global, 'Attr').hasOwnProperty('get') is false
     
    6489PASS Object.getOwnPropertyDescriptor(global, 'AudioProcessingEvent').enumerable is false
    6590PASS Object.getOwnPropertyDescriptor(global, 'AudioProcessingEvent').configurable is true
    66 PASS Object.getOwnPropertyDescriptor(global, 'AudioStreamTrack').value is AudioStreamTrack
    67 PASS Object.getOwnPropertyDescriptor(global, 'AudioStreamTrack').hasOwnProperty('get') is false
    68 PASS Object.getOwnPropertyDescriptor(global, 'AudioStreamTrack').hasOwnProperty('set') is false
    69 PASS Object.getOwnPropertyDescriptor(global, 'AudioStreamTrack').enumerable is false
    70 PASS Object.getOwnPropertyDescriptor(global, 'AudioStreamTrack').configurable is true
     91PASS Object.getOwnPropertyDescriptor(global, 'AudioTrack').value is AudioTrack
     92PASS Object.getOwnPropertyDescriptor(global, 'AudioTrack').hasOwnProperty('get') is false
     93PASS Object.getOwnPropertyDescriptor(global, 'AudioTrack').hasOwnProperty('set') is false
     94PASS Object.getOwnPropertyDescriptor(global, 'AudioTrack').enumerable is false
     95PASS Object.getOwnPropertyDescriptor(global, 'AudioTrack').configurable is true
     96PASS Object.getOwnPropertyDescriptor(global, 'AudioTrackList').value is AudioTrackList
     97PASS Object.getOwnPropertyDescriptor(global, 'AudioTrackList').hasOwnProperty('get') is false
     98PASS Object.getOwnPropertyDescriptor(global, 'AudioTrackList').hasOwnProperty('set') is false
     99PASS Object.getOwnPropertyDescriptor(global, 'AudioTrackList').enumerable is false
     100PASS Object.getOwnPropertyDescriptor(global, 'AudioTrackList').configurable is true
    71101PASS Object.getOwnPropertyDescriptor(global, 'BarProp').value is BarProp
    72102PASS Object.getOwnPropertyDescriptor(global, 'BarProp').hasOwnProperty('get') is false
     
    94124PASS Object.getOwnPropertyDescriptor(global, 'Blob').enumerable is false
    95125PASS Object.getOwnPropertyDescriptor(global, 'Blob').configurable is true
     126PASS Object.getOwnPropertyDescriptor(global, 'Boolean').value is Boolean
     127PASS Object.getOwnPropertyDescriptor(global, 'Boolean').hasOwnProperty('get') is false
     128PASS Object.getOwnPropertyDescriptor(global, 'Boolean').hasOwnProperty('set') is false
     129PASS Object.getOwnPropertyDescriptor(global, 'Boolean').enumerable is false
     130PASS Object.getOwnPropertyDescriptor(global, 'Boolean').configurable is true
    96131PASS Object.getOwnPropertyDescriptor(global, 'ByteLengthQueuingStrategy').value is ByteLengthQueuingStrategy
    97132PASS Object.getOwnPropertyDescriptor(global, 'ByteLengthQueuingStrategy').hasOwnProperty('get') is false
     
    299334PASS Object.getOwnPropertyDescriptor(global, 'DOMTokenList').enumerable is false
    300335PASS Object.getOwnPropertyDescriptor(global, 'DOMTokenList').configurable is true
    301 PASS Object.getOwnPropertyDescriptor(global, 'DataCue').value is DataCue
    302 PASS Object.getOwnPropertyDescriptor(global, 'DataCue').hasOwnProperty('get') is false
    303 PASS Object.getOwnPropertyDescriptor(global, 'DataCue').hasOwnProperty('set') is false
    304 PASS Object.getOwnPropertyDescriptor(global, 'DataCue').enumerable is false
    305 PASS Object.getOwnPropertyDescriptor(global, 'DataCue').configurable is true
    306336PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').value is DataTransfer
    307337PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').hasOwnProperty('get') is false
     
    309339PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').enumerable is false
    310340PASS Object.getOwnPropertyDescriptor(global, 'DataTransfer').configurable is true
     341PASS Object.getOwnPropertyDescriptor(global, 'DataView').value is DataView
     342PASS Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('get') is false
     343PASS Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('set') is false
     344PASS Object.getOwnPropertyDescriptor(global, 'DataView').enumerable is false
     345PASS Object.getOwnPropertyDescriptor(global, 'DataView').configurable is true
     346PASS Object.getOwnPropertyDescriptor(global, 'Database').value is Database
     347PASS Object.getOwnPropertyDescriptor(global, 'Database').hasOwnProperty('get') is false
     348PASS Object.getOwnPropertyDescriptor(global, 'Database').hasOwnProperty('set') is false
     349PASS Object.getOwnPropertyDescriptor(global, 'Database').enumerable is false
     350PASS Object.getOwnPropertyDescriptor(global, 'Database').configurable is true
     351PASS Object.getOwnPropertyDescriptor(global, 'Date').value is Date
     352PASS Object.getOwnPropertyDescriptor(global, 'Date').hasOwnProperty('get') is false
     353PASS Object.getOwnPropertyDescriptor(global, 'Date').hasOwnProperty('set') is false
     354PASS Object.getOwnPropertyDescriptor(global, 'Date').enumerable is false
     355PASS Object.getOwnPropertyDescriptor(global, 'Date').configurable is true
    311356PASS Object.getOwnPropertyDescriptor(global, 'DelayNode').value is DelayNode
    312357PASS Object.getOwnPropertyDescriptor(global, 'DelayNode').hasOwnProperty('get') is false
     
    324369PASS Object.getOwnPropertyDescriptor(global, 'DocumentFragment').enumerable is false
    325370PASS Object.getOwnPropertyDescriptor(global, 'DocumentFragment').configurable is true
     371PASS Object.getOwnPropertyDescriptor(global, 'DocumentTimeline').value is DocumentTimeline
     372PASS Object.getOwnPropertyDescriptor(global, 'DocumentTimeline').hasOwnProperty('get') is false
     373PASS Object.getOwnPropertyDescriptor(global, 'DocumentTimeline').hasOwnProperty('set') is false
     374PASS Object.getOwnPropertyDescriptor(global, 'DocumentTimeline').enumerable is false
     375PASS Object.getOwnPropertyDescriptor(global, 'DocumentTimeline').configurable is true
    326376PASS Object.getOwnPropertyDescriptor(global, 'DocumentType').value is DocumentType
    327377PASS Object.getOwnPropertyDescriptor(global, 'DocumentType').hasOwnProperty('get') is false
     
    339389PASS Object.getOwnPropertyDescriptor(global, 'Element').enumerable is false
    340390PASS Object.getOwnPropertyDescriptor(global, 'Element').configurable is true
     391PASS Object.getOwnPropertyDescriptor(global, 'Error').value is Error
     392PASS Object.getOwnPropertyDescriptor(global, 'Error').hasOwnProperty('get') is false
     393PASS Object.getOwnPropertyDescriptor(global, 'Error').hasOwnProperty('set') is false
     394PASS Object.getOwnPropertyDescriptor(global, 'Error').enumerable is false
     395PASS Object.getOwnPropertyDescriptor(global, 'Error').configurable is true
    341396PASS Object.getOwnPropertyDescriptor(global, 'ErrorEvent').value is ErrorEvent
    342397PASS Object.getOwnPropertyDescriptor(global, 'ErrorEvent').hasOwnProperty('get') is false
     
    344399PASS Object.getOwnPropertyDescriptor(global, 'ErrorEvent').enumerable is false
    345400PASS Object.getOwnPropertyDescriptor(global, 'ErrorEvent').configurable is true
     401PASS Object.getOwnPropertyDescriptor(global, 'EvalError').value is EvalError
     402PASS Object.getOwnPropertyDescriptor(global, 'EvalError').hasOwnProperty('get') is false
     403PASS Object.getOwnPropertyDescriptor(global, 'EvalError').hasOwnProperty('set') is false
     404PASS Object.getOwnPropertyDescriptor(global, 'EvalError').enumerable is false
     405PASS Object.getOwnPropertyDescriptor(global, 'EvalError').configurable is true
    346406PASS Object.getOwnPropertyDescriptor(global, 'Event').value is Event
    347407PASS Object.getOwnPropertyDescriptor(global, 'Event').hasOwnProperty('get') is false
     
    379439PASS Object.getOwnPropertyDescriptor(global, 'FileReader').enumerable is false
    380440PASS Object.getOwnPropertyDescriptor(global, 'FileReader').configurable is true
     441PASS Object.getOwnPropertyDescriptor(global, 'Float32Array').value is Float32Array
     442PASS Object.getOwnPropertyDescriptor(global, 'Float32Array').hasOwnProperty('get') is false
     443PASS Object.getOwnPropertyDescriptor(global, 'Float32Array').hasOwnProperty('set') is false
     444PASS Object.getOwnPropertyDescriptor(global, 'Float32Array').enumerable is false
     445PASS Object.getOwnPropertyDescriptor(global, 'Float32Array').configurable is true
     446PASS Object.getOwnPropertyDescriptor(global, 'Float64Array').value is Float64Array
     447PASS Object.getOwnPropertyDescriptor(global, 'Float64Array').hasOwnProperty('get') is false
     448PASS Object.getOwnPropertyDescriptor(global, 'Float64Array').hasOwnProperty('set') is false
     449PASS Object.getOwnPropertyDescriptor(global, 'Float64Array').enumerable is false
     450PASS Object.getOwnPropertyDescriptor(global, 'Float64Array').configurable is true
    381451PASS Object.getOwnPropertyDescriptor(global, 'FocusEvent').value is FocusEvent
    382452PASS Object.getOwnPropertyDescriptor(global, 'FocusEvent').hasOwnProperty('get') is false
     
    399469PASS Object.getOwnPropertyDescriptor(global, 'FormData').enumerable is false
    400470PASS Object.getOwnPropertyDescriptor(global, 'FormData').configurable is true
     471PASS Object.getOwnPropertyDescriptor(global, 'Function').value is Function
     472PASS Object.getOwnPropertyDescriptor(global, 'Function').hasOwnProperty('get') is false
     473PASS Object.getOwnPropertyDescriptor(global, 'Function').hasOwnProperty('set') is false
     474PASS Object.getOwnPropertyDescriptor(global, 'Function').enumerable is false
     475PASS Object.getOwnPropertyDescriptor(global, 'Function').configurable is true
    401476PASS Object.getOwnPropertyDescriptor(global, 'GainNode').value is GainNode
    402477PASS Object.getOwnPropertyDescriptor(global, 'GainNode').hasOwnProperty('get') is false
     
    664739PASS Object.getOwnPropertyDescriptor(global, 'HTMLParamElement').enumerable is false
    665740PASS Object.getOwnPropertyDescriptor(global, 'HTMLParamElement').configurable is true
     741PASS Object.getOwnPropertyDescriptor(global, 'HTMLPictureElement').value is HTMLPictureElement
     742PASS Object.getOwnPropertyDescriptor(global, 'HTMLPictureElement').hasOwnProperty('get') is false
     743PASS Object.getOwnPropertyDescriptor(global, 'HTMLPictureElement').hasOwnProperty('set') is false
     744PASS Object.getOwnPropertyDescriptor(global, 'HTMLPictureElement').enumerable is false
     745PASS Object.getOwnPropertyDescriptor(global, 'HTMLPictureElement').configurable is true
    666746PASS Object.getOwnPropertyDescriptor(global, 'HTMLPreElement').value is HTMLPreElement
    667747PASS Object.getOwnPropertyDescriptor(global, 'HTMLPreElement').hasOwnProperty('get') is false
     
    809889PASS Object.getOwnPropertyDescriptor(global, 'ImageData').enumerable is false
    810890PASS Object.getOwnPropertyDescriptor(global, 'ImageData').configurable is true
     891PASS Object.getOwnPropertyDescriptor(global, 'Int16Array').value is Int16Array
     892PASS Object.getOwnPropertyDescriptor(global, 'Int16Array').hasOwnProperty('get') is false
     893PASS Object.getOwnPropertyDescriptor(global, 'Int16Array').hasOwnProperty('set') is false
     894PASS Object.getOwnPropertyDescriptor(global, 'Int16Array').enumerable is false
     895PASS Object.getOwnPropertyDescriptor(global, 'Int16Array').configurable is true
     896PASS Object.getOwnPropertyDescriptor(global, 'Int32Array').value is Int32Array
     897PASS Object.getOwnPropertyDescriptor(global, 'Int32Array').hasOwnProperty('get') is false
     898PASS Object.getOwnPropertyDescriptor(global, 'Int32Array').hasOwnProperty('set') is false
     899PASS Object.getOwnPropertyDescriptor(global, 'Int32Array').enumerable is false
     900PASS Object.getOwnPropertyDescriptor(global, 'Int32Array').configurable is true
     901PASS Object.getOwnPropertyDescriptor(global, 'Int8Array').value is Int8Array
     902PASS Object.getOwnPropertyDescriptor(global, 'Int8Array').hasOwnProperty('get') is false
     903PASS Object.getOwnPropertyDescriptor(global, 'Int8Array').hasOwnProperty('set') is false
     904PASS Object.getOwnPropertyDescriptor(global, 'Int8Array').enumerable is false
     905PASS Object.getOwnPropertyDescriptor(global, 'Int8Array').configurable is true
    811906PASS Object.getOwnPropertyDescriptor(global, 'KeyboardEvent').value is KeyboardEvent
    812907PASS Object.getOwnPropertyDescriptor(global, 'KeyboardEvent').hasOwnProperty('get') is false
     
    814909PASS Object.getOwnPropertyDescriptor(global, 'KeyboardEvent').enumerable is false
    815910PASS Object.getOwnPropertyDescriptor(global, 'KeyboardEvent').configurable is true
     911PASS Object.getOwnPropertyDescriptor(global, 'KeyframeEffect').value is KeyframeEffect
     912PASS Object.getOwnPropertyDescriptor(global, 'KeyframeEffect').hasOwnProperty('get') is false
     913PASS Object.getOwnPropertyDescriptor(global, 'KeyframeEffect').hasOwnProperty('set') is false
     914PASS Object.getOwnPropertyDescriptor(global, 'KeyframeEffect').enumerable is false
     915PASS Object.getOwnPropertyDescriptor(global, 'KeyframeEffect').configurable is true
    816916PASS Object.getOwnPropertyDescriptor(global, 'Location').value is Location
    817917PASS Object.getOwnPropertyDescriptor(global, 'Location').hasOwnProperty('get') is false
     
    819919PASS Object.getOwnPropertyDescriptor(global, 'Location').enumerable is false
    820920PASS Object.getOwnPropertyDescriptor(global, 'Location').configurable is true
     921PASS Object.getOwnPropertyDescriptor(global, 'Map').value is Map
     922PASS Object.getOwnPropertyDescriptor(global, 'Map').hasOwnProperty('get') is false
     923PASS Object.getOwnPropertyDescriptor(global, 'Map').hasOwnProperty('set') is false
     924PASS Object.getOwnPropertyDescriptor(global, 'Map').enumerable is false
     925PASS Object.getOwnPropertyDescriptor(global, 'Map').configurable is true
    821926PASS Object.getOwnPropertyDescriptor(global, 'MediaController').value is MediaController
    822927PASS Object.getOwnPropertyDescriptor(global, 'MediaController').hasOwnProperty('get') is false
     
    844949PASS Object.getOwnPropertyDescriptor(global, 'MediaSource').enumerable is false
    845950PASS Object.getOwnPropertyDescriptor(global, 'MediaSource').configurable is true
     951PASS Object.getOwnPropertyDescriptor(global, 'MediaStream').value is MediaStream
     952PASS Object.getOwnPropertyDescriptor(global, 'MediaStream').hasOwnProperty('get') is false
     953PASS Object.getOwnPropertyDescriptor(global, 'MediaStream').hasOwnProperty('set') is false
     954PASS Object.getOwnPropertyDescriptor(global, 'MediaStream').enumerable is false
     955PASS Object.getOwnPropertyDescriptor(global, 'MediaStream').configurable is true
    846956PASS Object.getOwnPropertyDescriptor(global, 'MediaStreamAudioDestinationNode').value is MediaStreamAudioDestinationNode
    847957PASS Object.getOwnPropertyDescriptor(global, 'MediaStreamAudioDestinationNode').hasOwnProperty('get') is false
     
    9441054PASS Object.getOwnPropertyDescriptor(global, 'NodeList').enumerable is false
    9451055PASS Object.getOwnPropertyDescriptor(global, 'NodeList').configurable is true
     1056PASS Object.getOwnPropertyDescriptor(global, 'Notification').value is Notification
     1057PASS Object.getOwnPropertyDescriptor(global, 'Notification').hasOwnProperty('get') is false
     1058PASS Object.getOwnPropertyDescriptor(global, 'Notification').hasOwnProperty('set') is false
     1059PASS Object.getOwnPropertyDescriptor(global, 'Notification').enumerable is false
     1060PASS Object.getOwnPropertyDescriptor(global, 'Notification').configurable is true
     1061PASS Object.getOwnPropertyDescriptor(global, 'Number').value is Number
     1062PASS Object.getOwnPropertyDescriptor(global, 'Number').hasOwnProperty('get') is false
     1063PASS Object.getOwnPropertyDescriptor(global, 'Number').hasOwnProperty('set') is false
     1064PASS Object.getOwnPropertyDescriptor(global, 'Number').enumerable is false
     1065PASS Object.getOwnPropertyDescriptor(global, 'Number').configurable is true
     1066PASS Object.getOwnPropertyDescriptor(global, 'Object').value is Object
     1067PASS Object.getOwnPropertyDescriptor(global, 'Object').hasOwnProperty('get') is false
     1068PASS Object.getOwnPropertyDescriptor(global, 'Object').hasOwnProperty('set') is false
     1069PASS Object.getOwnPropertyDescriptor(global, 'Object').enumerable is false
     1070PASS Object.getOwnPropertyDescriptor(global, 'Object').configurable is true
    9461071PASS Object.getOwnPropertyDescriptor(global, 'OfflineAudioCompletionEvent').value is OfflineAudioCompletionEvent
    9471072PASS Object.getOwnPropertyDescriptor(global, 'OfflineAudioCompletionEvent').hasOwnProperty('get') is false
     
    9791104PASS Object.getOwnPropertyDescriptor(global, 'Performance').enumerable is false
    9801105PASS Object.getOwnPropertyDescriptor(global, 'Performance').configurable is true
    981 PASS Object.getOwnPropertyDescriptor(global, 'PerformanceEntry').value is PerformanceEntry
    982 PASS Object.getOwnPropertyDescriptor(global, 'PerformanceEntry').hasOwnProperty('get') is false
    983 PASS Object.getOwnPropertyDescriptor(global, 'PerformanceEntry').hasOwnProperty('set') is false
    984 PASS Object.getOwnPropertyDescriptor(global, 'PerformanceEntry').enumerable is false
    985 PASS Object.getOwnPropertyDescriptor(global, 'PerformanceEntry').configurable is true
    9861106PASS Object.getOwnPropertyDescriptor(global, 'PerformanceMark').value is PerformanceMark
    9871107PASS Object.getOwnPropertyDescriptor(global, 'PerformanceMark').hasOwnProperty('get') is false
     
    9991119PASS Object.getOwnPropertyDescriptor(global, 'PerformanceNavigation').enumerable is false
    10001120PASS Object.getOwnPropertyDescriptor(global, 'PerformanceNavigation').configurable is true
    1001 PASS Object.getOwnPropertyDescriptor(global, 'PerformanceResourceTiming').value is PerformanceResourceTiming
    1002 PASS Object.getOwnPropertyDescriptor(global, 'PerformanceResourceTiming').hasOwnProperty('get') is false
    1003 PASS Object.getOwnPropertyDescriptor(global, 'PerformanceResourceTiming').hasOwnProperty('set') is false
    1004 PASS Object.getOwnPropertyDescriptor(global, 'PerformanceResourceTiming').enumerable is false
    1005 PASS Object.getOwnPropertyDescriptor(global, 'PerformanceResourceTiming').configurable is true
    10061121PASS Object.getOwnPropertyDescriptor(global, 'PerformanceTiming').value is PerformanceTiming
    10071122PASS Object.getOwnPropertyDescriptor(global, 'PerformanceTiming').hasOwnProperty('get') is false
     
    10391154PASS Object.getOwnPropertyDescriptor(global, 'ProgressEvent').enumerable is false
    10401155PASS Object.getOwnPropertyDescriptor(global, 'ProgressEvent').configurable is true
     1156PASS Object.getOwnPropertyDescriptor(global, 'Promise').value is Promise
     1157PASS Object.getOwnPropertyDescriptor(global, 'Promise').hasOwnProperty('get') is false
     1158PASS Object.getOwnPropertyDescriptor(global, 'Promise').hasOwnProperty('set') is false
     1159PASS Object.getOwnPropertyDescriptor(global, 'Promise').enumerable is false
     1160PASS Object.getOwnPropertyDescriptor(global, 'Promise').configurable is true
    10411161PASS Object.getOwnPropertyDescriptor(global, 'RGBColor').value is RGBColor
    10421162PASS Object.getOwnPropertyDescriptor(global, 'RGBColor').hasOwnProperty('get') is false
     
    10791199PASS Object.getOwnPropertyDescriptor(global, 'Range').enumerable is false
    10801200PASS Object.getOwnPropertyDescriptor(global, 'Range').configurable is true
     1201PASS Object.getOwnPropertyDescriptor(global, 'RangeError').value is RangeError
     1202PASS Object.getOwnPropertyDescriptor(global, 'RangeError').hasOwnProperty('get') is false
     1203PASS Object.getOwnPropertyDescriptor(global, 'RangeError').hasOwnProperty('set') is false
     1204PASS Object.getOwnPropertyDescriptor(global, 'RangeError').enumerable is false
     1205PASS Object.getOwnPropertyDescriptor(global, 'RangeError').configurable is true
    10811206PASS Object.getOwnPropertyDescriptor(global, 'ReadableStream').value is ReadableStream
    10821207PASS Object.getOwnPropertyDescriptor(global, 'ReadableStream').hasOwnProperty('get') is false
     
    10891214PASS Object.getOwnPropertyDescriptor(global, 'Rect').enumerable is false
    10901215PASS Object.getOwnPropertyDescriptor(global, 'Rect').configurable is true
     1216PASS Object.getOwnPropertyDescriptor(global, 'ReferenceError').value is ReferenceError
     1217PASS Object.getOwnPropertyDescriptor(global, 'ReferenceError').hasOwnProperty('get') is false
     1218PASS Object.getOwnPropertyDescriptor(global, 'ReferenceError').hasOwnProperty('set') is false
     1219PASS Object.getOwnPropertyDescriptor(global, 'ReferenceError').enumerable is false
     1220PASS Object.getOwnPropertyDescriptor(global, 'ReferenceError').configurable is true
     1221PASS Object.getOwnPropertyDescriptor(global, 'RegExp').value is RegExp
     1222PASS Object.getOwnPropertyDescriptor(global, 'RegExp').hasOwnProperty('get') is false
     1223PASS Object.getOwnPropertyDescriptor(global, 'RegExp').hasOwnProperty('set') is false
     1224PASS Object.getOwnPropertyDescriptor(global, 'RegExp').enumerable is false
     1225PASS Object.getOwnPropertyDescriptor(global, 'RegExp').configurable is true
    10911226PASS Object.getOwnPropertyDescriptor(global, 'Request').value is Request
    10921227PASS Object.getOwnPropertyDescriptor(global, 'Request').hasOwnProperty('get') is false
     
    10991234PASS Object.getOwnPropertyDescriptor(global, 'Response').enumerable is false
    11001235PASS Object.getOwnPropertyDescriptor(global, 'Response').configurable is true
     1236PASS Object.getOwnPropertyDescriptor(global, 'SQLError').value is SQLError
     1237PASS Object.getOwnPropertyDescriptor(global, 'SQLError').hasOwnProperty('get') is false
     1238PASS Object.getOwnPropertyDescriptor(global, 'SQLError').hasOwnProperty('set') is false
     1239PASS Object.getOwnPropertyDescriptor(global, 'SQLError').enumerable is false
     1240PASS Object.getOwnPropertyDescriptor(global, 'SQLError').configurable is true
    11011241PASS Object.getOwnPropertyDescriptor(global, 'SQLException').value is SQLException
    11021242PASS Object.getOwnPropertyDescriptor(global, 'SQLException').hasOwnProperty('get') is false
     
    11041244PASS Object.getOwnPropertyDescriptor(global, 'SQLException').enumerable is false
    11051245PASS Object.getOwnPropertyDescriptor(global, 'SQLException').configurable is true
     1246PASS Object.getOwnPropertyDescriptor(global, 'SQLResultSet').value is SQLResultSet
     1247PASS Object.getOwnPropertyDescriptor(global, 'SQLResultSet').hasOwnProperty('get') is false
     1248PASS Object.getOwnPropertyDescriptor(global, 'SQLResultSet').hasOwnProperty('set') is false
     1249PASS Object.getOwnPropertyDescriptor(global, 'SQLResultSet').enumerable is false
     1250PASS Object.getOwnPropertyDescriptor(global, 'SQLResultSet').configurable is true
     1251PASS Object.getOwnPropertyDescriptor(global, 'SQLResultSetRowList').value is SQLResultSetRowList
     1252PASS Object.getOwnPropertyDescriptor(global, 'SQLResultSetRowList').hasOwnProperty('get') is false
     1253PASS Object.getOwnPropertyDescriptor(global, 'SQLResultSetRowList').hasOwnProperty('set') is false
     1254PASS Object.getOwnPropertyDescriptor(global, 'SQLResultSetRowList').enumerable is false
     1255PASS Object.getOwnPropertyDescriptor(global, 'SQLResultSetRowList').configurable is true
     1256PASS Object.getOwnPropertyDescriptor(global, 'SQLTransaction').value is SQLTransaction
     1257PASS Object.getOwnPropertyDescriptor(global, 'SQLTransaction').hasOwnProperty('get') is false
     1258PASS Object.getOwnPropertyDescriptor(global, 'SQLTransaction').hasOwnProperty('set') is false
     1259PASS Object.getOwnPropertyDescriptor(global, 'SQLTransaction').enumerable is false
     1260PASS Object.getOwnPropertyDescriptor(global, 'SQLTransaction').configurable is true
    11061261PASS Object.getOwnPropertyDescriptor(global, 'SVGAElement').value is SVGAElement
    11071262PASS Object.getOwnPropertyDescriptor(global, 'SVGAElement').hasOwnProperty('get') is false
     
    18291984PASS Object.getOwnPropertyDescriptor(global, 'Selection').enumerable is false
    18301985PASS Object.getOwnPropertyDescriptor(global, 'Selection').configurable is true
     1986PASS Object.getOwnPropertyDescriptor(global, 'Set').value is Set
     1987PASS Object.getOwnPropertyDescriptor(global, 'Set').hasOwnProperty('get') is false
     1988PASS Object.getOwnPropertyDescriptor(global, 'Set').hasOwnProperty('set') is false
     1989PASS Object.getOwnPropertyDescriptor(global, 'Set').enumerable is false
     1990PASS Object.getOwnPropertyDescriptor(global, 'Set').configurable is true
    18311991PASS Object.getOwnPropertyDescriptor(global, 'Storage').value is Storage
    18321992PASS Object.getOwnPropertyDescriptor(global, 'Storage').hasOwnProperty('get') is false
     
    18391999PASS Object.getOwnPropertyDescriptor(global, 'StorageEvent').enumerable is false
    18402000PASS Object.getOwnPropertyDescriptor(global, 'StorageEvent').configurable is true
     2001PASS Object.getOwnPropertyDescriptor(global, 'String').value is String
     2002PASS Object.getOwnPropertyDescriptor(global, 'String').hasOwnProperty('get') is false
     2003PASS Object.getOwnPropertyDescriptor(global, 'String').hasOwnProperty('set') is false
     2004PASS Object.getOwnPropertyDescriptor(global, 'String').enumerable is false
     2005PASS Object.getOwnPropertyDescriptor(global, 'String').configurable is true
    18412006PASS Object.getOwnPropertyDescriptor(global, 'StyleSheet').value is StyleSheet
    18422007PASS Object.getOwnPropertyDescriptor(global, 'StyleSheet').hasOwnProperty('get') is false
     
    18492014PASS Object.getOwnPropertyDescriptor(global, 'StyleSheetList').enumerable is false
    18502015PASS Object.getOwnPropertyDescriptor(global, 'StyleSheetList').configurable is true
     2016PASS Object.getOwnPropertyDescriptor(global, 'Symbol').value is Symbol
     2017PASS Object.getOwnPropertyDescriptor(global, 'Symbol').hasOwnProperty('get') is false
     2018PASS Object.getOwnPropertyDescriptor(global, 'Symbol').hasOwnProperty('set') is false
     2019PASS Object.getOwnPropertyDescriptor(global, 'Symbol').enumerable is false
     2020PASS Object.getOwnPropertyDescriptor(global, 'Symbol').configurable is true
     2021PASS Object.getOwnPropertyDescriptor(global, 'SyntaxError').value is SyntaxError
     2022PASS Object.getOwnPropertyDescriptor(global, 'SyntaxError').hasOwnProperty('get') is false
     2023PASS Object.getOwnPropertyDescriptor(global, 'SyntaxError').hasOwnProperty('set') is false
     2024PASS Object.getOwnPropertyDescriptor(global, 'SyntaxError').enumerable is false
     2025PASS Object.getOwnPropertyDescriptor(global, 'SyntaxError').configurable is true
    18512026PASS Object.getOwnPropertyDescriptor(global, 'Text').value is Text
    18522027PASS Object.getOwnPropertyDescriptor(global, 'Text').hasOwnProperty('get') is false
     
    19192094PASS Object.getOwnPropertyDescriptor(global, 'TreeWalker').enumerable is false
    19202095PASS Object.getOwnPropertyDescriptor(global, 'TreeWalker').configurable is true
     2096PASS Object.getOwnPropertyDescriptor(global, 'TypeError').value is TypeError
     2097PASS Object.getOwnPropertyDescriptor(global, 'TypeError').hasOwnProperty('get') is false
     2098PASS Object.getOwnPropertyDescriptor(global, 'TypeError').hasOwnProperty('set') is false
     2099PASS Object.getOwnPropertyDescriptor(global, 'TypeError').enumerable is false
     2100PASS Object.getOwnPropertyDescriptor(global, 'TypeError').configurable is true
    19212101PASS Object.getOwnPropertyDescriptor(global, 'UIEvent').value is UIEvent
    19222102PASS Object.getOwnPropertyDescriptor(global, 'UIEvent').hasOwnProperty('get') is false
     
    19242104PASS Object.getOwnPropertyDescriptor(global, 'UIEvent').enumerable is false
    19252105PASS Object.getOwnPropertyDescriptor(global, 'UIEvent').configurable is true
     2106PASS Object.getOwnPropertyDescriptor(global, 'URIError').value is URIError
     2107PASS Object.getOwnPropertyDescriptor(global, 'URIError').hasOwnProperty('get') is false
     2108PASS Object.getOwnPropertyDescriptor(global, 'URIError').hasOwnProperty('set') is false
     2109PASS Object.getOwnPropertyDescriptor(global, 'URIError').enumerable is false
     2110PASS Object.getOwnPropertyDescriptor(global, 'URIError').configurable is true
    19262111PASS Object.getOwnPropertyDescriptor(global, 'URL').value is URL
    19272112PASS Object.getOwnPropertyDescriptor(global, 'URL').hasOwnProperty('get') is false
     
    19292114PASS Object.getOwnPropertyDescriptor(global, 'URL').enumerable is false
    19302115PASS Object.getOwnPropertyDescriptor(global, 'URL').configurable is true
     2116PASS Object.getOwnPropertyDescriptor(global, 'Uint16Array').value is Uint16Array
     2117PASS Object.getOwnPropertyDescriptor(global, 'Uint16Array').hasOwnProperty('get') is false
     2118PASS Object.getOwnPropertyDescriptor(global, 'Uint16Array').hasOwnProperty('set') is false
     2119PASS Object.getOwnPropertyDescriptor(global, 'Uint16Array').enumerable is false
     2120PASS Object.getOwnPropertyDescriptor(global, 'Uint16Array').configurable is true
     2121PASS Object.getOwnPropertyDescriptor(global, 'Uint32Array').value is Uint32Array
     2122PASS Object.getOwnPropertyDescriptor(global, 'Uint32Array').hasOwnProperty('get') is false
     2123PASS Object.getOwnPropertyDescriptor(global, 'Uint32Array').hasOwnProperty('set') is false
     2124PASS Object.getOwnPropertyDescriptor(global, 'Uint32Array').enumerable is false
     2125PASS Object.getOwnPropertyDescriptor(global, 'Uint32Array').configurable is true
     2126PASS Object.getOwnPropertyDescriptor(global, 'Uint8Array').value is Uint8Array
     2127PASS Object.getOwnPropertyDescriptor(global, 'Uint8Array').hasOwnProperty('get') is false
     2128PASS Object.getOwnPropertyDescriptor(global, 'Uint8Array').hasOwnProperty('set') is false
     2129PASS Object.getOwnPropertyDescriptor(global, 'Uint8Array').enumerable is false
     2130PASS Object.getOwnPropertyDescriptor(global, 'Uint8Array').configurable is true
     2131PASS Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').value is Uint8ClampedArray
     2132PASS Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').hasOwnProperty('get') is false
     2133PASS Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').hasOwnProperty('set') is false
     2134PASS Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').enumerable is false
     2135PASS Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').configurable is true
     2136PASS Object.getOwnPropertyDescriptor(global, 'UserMessageHandler').value is UserMessageHandler
     2137PASS Object.getOwnPropertyDescriptor(global, 'UserMessageHandler').hasOwnProperty('get') is false
     2138PASS Object.getOwnPropertyDescriptor(global, 'UserMessageHandler').hasOwnProperty('set') is false
     2139PASS Object.getOwnPropertyDescriptor(global, 'UserMessageHandler').enumerable is false
     2140PASS Object.getOwnPropertyDescriptor(global, 'UserMessageHandler').configurable is true
     2141PASS Object.getOwnPropertyDescriptor(global, 'UserMessageHandlersNamespace').value is UserMessageHandlersNamespace
     2142PASS Object.getOwnPropertyDescriptor(global, 'UserMessageHandlersNamespace').hasOwnProperty('get') is false
     2143PASS Object.getOwnPropertyDescriptor(global, 'UserMessageHandlersNamespace').hasOwnProperty('set') is false
     2144PASS Object.getOwnPropertyDescriptor(global, 'UserMessageHandlersNamespace').enumerable is false
     2145PASS Object.getOwnPropertyDescriptor(global, 'UserMessageHandlersNamespace').configurable is true
    19312146PASS Object.getOwnPropertyDescriptor(global, 'VTTCue').value is VTTCue
    19322147PASS Object.getOwnPropertyDescriptor(global, 'VTTCue').hasOwnProperty('get') is false
     
    19342149PASS Object.getOwnPropertyDescriptor(global, 'VTTCue').enumerable is false
    19352150PASS Object.getOwnPropertyDescriptor(global, 'VTTCue').configurable is true
     2151PASS Object.getOwnPropertyDescriptor(global, 'VTTRegion').value is VTTRegion
     2152PASS Object.getOwnPropertyDescriptor(global, 'VTTRegion').hasOwnProperty('get') is false
     2153PASS Object.getOwnPropertyDescriptor(global, 'VTTRegion').hasOwnProperty('set') is false
     2154PASS Object.getOwnPropertyDescriptor(global, 'VTTRegion').enumerable is false
     2155PASS Object.getOwnPropertyDescriptor(global, 'VTTRegion').configurable is true
    19362156PASS Object.getOwnPropertyDescriptor(global, 'ValidityState').value is ValidityState
    19372157PASS Object.getOwnPropertyDescriptor(global, 'ValidityState').hasOwnProperty('get') is false
     
    19392159PASS Object.getOwnPropertyDescriptor(global, 'ValidityState').enumerable is false
    19402160PASS Object.getOwnPropertyDescriptor(global, 'ValidityState').configurable is true
    1941 PASS Object.getOwnPropertyDescriptor(global, 'VideoStreamTrack').value is VideoStreamTrack
    1942 PASS Object.getOwnPropertyDescriptor(global, 'VideoStreamTrack').hasOwnProperty('get') is false
    1943 PASS Object.getOwnPropertyDescriptor(global, 'VideoStreamTrack').hasOwnProperty('set') is false
    1944 PASS Object.getOwnPropertyDescriptor(global, 'VideoStreamTrack').enumerable is false
    1945 PASS Object.getOwnPropertyDescriptor(global, 'VideoStreamTrack').configurable is true
     2161PASS Object.getOwnPropertyDescriptor(global, 'VideoTrack').value is VideoTrack
     2162PASS Object.getOwnPropertyDescriptor(global, 'VideoTrack').hasOwnProperty('get') is false
     2163PASS Object.getOwnPropertyDescriptor(global, 'VideoTrack').hasOwnProperty('set') is false
     2164PASS Object.getOwnPropertyDescriptor(global, 'VideoTrack').enumerable is false
     2165PASS Object.getOwnPropertyDescriptor(global, 'VideoTrack').configurable is true
     2166PASS Object.getOwnPropertyDescriptor(global, 'VideoTrackList').value is VideoTrackList
     2167PASS Object.getOwnPropertyDescriptor(global, 'VideoTrackList').hasOwnProperty('get') is false
     2168PASS Object.getOwnPropertyDescriptor(global, 'VideoTrackList').hasOwnProperty('set') is false
     2169PASS Object.getOwnPropertyDescriptor(global, 'VideoTrackList').enumerable is false
     2170PASS Object.getOwnPropertyDescriptor(global, 'VideoTrackList').configurable is true
    19462171PASS Object.getOwnPropertyDescriptor(global, 'WaveShaperNode').value is WaveShaperNode
    19472172PASS Object.getOwnPropertyDescriptor(global, 'WaveShaperNode').hasOwnProperty('get') is false
     
    19492174PASS Object.getOwnPropertyDescriptor(global, 'WaveShaperNode').enumerable is false
    19502175PASS Object.getOwnPropertyDescriptor(global, 'WaveShaperNode').configurable is true
     2176PASS Object.getOwnPropertyDescriptor(global, 'WeakMap').value is WeakMap
     2177PASS Object.getOwnPropertyDescriptor(global, 'WeakMap').hasOwnProperty('get') is false
     2178PASS Object.getOwnPropertyDescriptor(global, 'WeakMap').hasOwnProperty('set') is false
     2179PASS Object.getOwnPropertyDescriptor(global, 'WeakMap').enumerable is false
     2180PASS Object.getOwnPropertyDescriptor(global, 'WeakMap').configurable is true
     2181PASS Object.getOwnPropertyDescriptor(global, 'WeakSet').value is WeakSet
     2182PASS Object.getOwnPropertyDescriptor(global, 'WeakSet').hasOwnProperty('get') is false
     2183PASS Object.getOwnPropertyDescriptor(global, 'WeakSet').hasOwnProperty('set') is false
     2184PASS Object.getOwnPropertyDescriptor(global, 'WeakSet').enumerable is false
     2185PASS Object.getOwnPropertyDescriptor(global, 'WeakSet').configurable is true
    19512186PASS Object.getOwnPropertyDescriptor(global, 'WebGLActiveInfo').value is WebGLActiveInfo
    19522187PASS Object.getOwnPropertyDescriptor(global, 'WebGLActiveInfo').hasOwnProperty('get') is false
     
    19742209PASS Object.getOwnPropertyDescriptor(global, 'WebGLProgram').enumerable is false
    19752210PASS Object.getOwnPropertyDescriptor(global, 'WebGLProgram').configurable is true
     2211PASS Object.getOwnPropertyDescriptor(global, 'WebGLQuery').value is WebGLQuery
     2212PASS Object.getOwnPropertyDescriptor(global, 'WebGLQuery').hasOwnProperty('get') is false
     2213PASS Object.getOwnPropertyDescriptor(global, 'WebGLQuery').hasOwnProperty('set') is false
     2214PASS Object.getOwnPropertyDescriptor(global, 'WebGLQuery').enumerable is false
     2215PASS Object.getOwnPropertyDescriptor(global, 'WebGLQuery').configurable is true
    19762216PASS Object.getOwnPropertyDescriptor(global, 'WebGLRenderbuffer').value is WebGLRenderbuffer
    19772217PASS Object.getOwnPropertyDescriptor(global, 'WebGLRenderbuffer').hasOwnProperty('get') is false
     
    19842224PASS Object.getOwnPropertyDescriptor(global, 'WebGLRenderingContext').enumerable is false
    19852225PASS Object.getOwnPropertyDescriptor(global, 'WebGLRenderingContext').configurable is true
     2226PASS Object.getOwnPropertyDescriptor(global, 'WebGLSampler').value is WebGLSampler
     2227PASS Object.getOwnPropertyDescriptor(global, 'WebGLSampler').hasOwnProperty('get') is false
     2228PASS Object.getOwnPropertyDescriptor(global, 'WebGLSampler').hasOwnProperty('set') is false
     2229PASS Object.getOwnPropertyDescriptor(global, 'WebGLSampler').enumerable is false
     2230PASS Object.getOwnPropertyDescriptor(global, 'WebGLSampler').configurable is true
    19862231PASS Object.getOwnPropertyDescriptor(global, 'WebGLShader').value is WebGLShader
    19872232PASS Object.getOwnPropertyDescriptor(global, 'WebGLShader').hasOwnProperty('get') is false
     
    19942239PASS Object.getOwnPropertyDescriptor(global, 'WebGLShaderPrecisionFormat').enumerable is false
    19952240PASS Object.getOwnPropertyDescriptor(global, 'WebGLShaderPrecisionFormat').configurable is true
     2241PASS Object.getOwnPropertyDescriptor(global, 'WebGLSync').value is WebGLSync
     2242PASS Object.getOwnPropertyDescriptor(global, 'WebGLSync').hasOwnProperty('get') is false
     2243PASS Object.getOwnPropertyDescriptor(global, 'WebGLSync').hasOwnProperty('set') is false
     2244PASS Object.getOwnPropertyDescriptor(global, 'WebGLSync').enumerable is false
     2245PASS Object.getOwnPropertyDescriptor(global, 'WebGLSync').configurable is true
    19962246PASS Object.getOwnPropertyDescriptor(global, 'WebGLTexture').value is WebGLTexture
    19972247PASS Object.getOwnPropertyDescriptor(global, 'WebGLTexture').hasOwnProperty('get') is false
     
    19992249PASS Object.getOwnPropertyDescriptor(global, 'WebGLTexture').enumerable is false
    20002250PASS Object.getOwnPropertyDescriptor(global, 'WebGLTexture').configurable is true
     2251PASS Object.getOwnPropertyDescriptor(global, 'WebGLTransformFeedback').value is WebGLTransformFeedback
     2252PASS Object.getOwnPropertyDescriptor(global, 'WebGLTransformFeedback').hasOwnProperty('get') is false
     2253PASS Object.getOwnPropertyDescriptor(global, 'WebGLTransformFeedback').hasOwnProperty('set') is false
     2254PASS Object.getOwnPropertyDescriptor(global, 'WebGLTransformFeedback').enumerable is false
     2255PASS Object.getOwnPropertyDescriptor(global, 'WebGLTransformFeedback').configurable is true
    20012256PASS Object.getOwnPropertyDescriptor(global, 'WebGLUniformLocation').value is WebGLUniformLocation
    20022257PASS Object.getOwnPropertyDescriptor(global, 'WebGLUniformLocation').hasOwnProperty('get') is false
     
    20092264PASS Object.getOwnPropertyDescriptor(global, 'WebKitAnimationEvent').enumerable is false
    20102265PASS Object.getOwnPropertyDescriptor(global, 'WebKitAnimationEvent').configurable is true
     2266PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSFilterValue').value is WebKitCSSFilterValue
     2267PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSFilterValue').hasOwnProperty('get') is false
     2268PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSFilterValue').hasOwnProperty('set') is false
     2269PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSFilterValue').enumerable is false
     2270PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSFilterValue').configurable is true
    20112271PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSMatrix').value is WebKitCSSMatrix
    20122272PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSMatrix').hasOwnProperty('get') is false
     
    20242284PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSTransformValue').enumerable is false
    20252285PASS Object.getOwnPropertyDescriptor(global, 'WebKitCSSTransformValue').configurable is true
     2286PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').value is WebKitDataCue
     2287PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').hasOwnProperty('get') is false
     2288PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').hasOwnProperty('set') is false
     2289PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').enumerable is false
     2290PASS Object.getOwnPropertyDescriptor(global, 'WebKitDataCue').configurable is true
    20262291PASS Object.getOwnPropertyDescriptor(global, 'WebKitMutationObserver').value is WebKitMutationObserver
    20272292PASS Object.getOwnPropertyDescriptor(global, 'WebKitMutationObserver').hasOwnProperty('get') is false
     
    20292294PASS Object.getOwnPropertyDescriptor(global, 'WebKitMutationObserver').enumerable is false
    20302295PASS Object.getOwnPropertyDescriptor(global, 'WebKitMutationObserver').configurable is true
     2296PASS Object.getOwnPropertyDescriptor(global, 'WebKitNamespace').value is WebKitNamespace
     2297PASS Object.getOwnPropertyDescriptor(global, 'WebKitNamespace').hasOwnProperty('get') is false
     2298PASS Object.getOwnPropertyDescriptor(global, 'WebKitNamespace').hasOwnProperty('set') is false
     2299PASS Object.getOwnPropertyDescriptor(global, 'WebKitNamespace').enumerable is false
     2300PASS Object.getOwnPropertyDescriptor(global, 'WebKitNamespace').configurable is true
    20312301PASS Object.getOwnPropertyDescriptor(global, 'WebKitPoint').value is WebKitPoint
    20322302PASS Object.getOwnPropertyDescriptor(global, 'WebKitPoint').hasOwnProperty('get') is false
     
    21292399PASS Object.getOwnPropertyDescriptor(global, 'webkitAudioPannerNode').enumerable is false
    21302400PASS Object.getOwnPropertyDescriptor(global, 'webkitAudioPannerNode').configurable is true
    2131 PASS Object.getOwnPropertyDescriptor(global, 'webkitMediaStream').value is webkitMediaStream
    2132 PASS Object.getOwnPropertyDescriptor(global, 'webkitMediaStream').hasOwnProperty('get') is false
    2133 PASS Object.getOwnPropertyDescriptor(global, 'webkitMediaStream').hasOwnProperty('set') is false
    2134 PASS Object.getOwnPropertyDescriptor(global, 'webkitMediaStream').enumerable is false
    2135 PASS Object.getOwnPropertyDescriptor(global, 'webkitMediaStream').configurable is true
    21362401PASS Object.getOwnPropertyDescriptor(global, 'webkitOfflineAudioContext').value is webkitOfflineAudioContext
    21372402PASS Object.getOwnPropertyDescriptor(global, 'webkitOfflineAudioContext').hasOwnProperty('get') is false
  • trunk/LayoutTests/platform/mac-yosemite/js/dom/global-constructors-attributes-expected.txt

    r199942 r201810  
    99PASS Object.getOwnPropertyDescriptor(global, 'AnalyserNode').enumerable is false
    1010PASS Object.getOwnPropertyDescriptor(global, 'AnalyserNode').configurable is true
     11PASS Object.getOwnPropertyDescriptor(global, 'Animation').value is Animation
     12PASS Object.getOwnPropertyDescriptor(global, 'Animation').hasOwnProperty('get') is false
     13PASS Object.getOwnPropertyDescriptor(global, 'Animation').hasOwnProperty('set') is false
     14PASS Object.getOwnPropertyDescriptor(global, 'Animation').enumerable is false
     15PASS Object.getOwnPropertyDescriptor(global, 'Animation').configurable is true
     16PASS Object.getOwnPropertyDescriptor(global, 'AnimationEffectReadOnly').value is AnimationEffectReadOnly
     17PASS Object.getOwnPropertyDescriptor(global, 'AnimationEffectReadOnly').hasOwnProperty('get') is false
     18PASS Object.getOwnPropertyDescriptor(global, 'AnimationEffectReadOnly').hasOwnProperty('set') is false
     19PASS Object.getOwnPropertyDescriptor(global, 'AnimationEffectReadOnly').enumerable is false
     20PASS Object.getOwnPropertyDescriptor(global, 'AnimationEffectReadOnly').configurable is true
    1121PASS Object.getOwnPropertyDescriptor(global, 'AnimationEvent').value is AnimationEvent
    1222PASS Object.getOwnPropertyDescriptor(global, 'AnimationEvent').hasOwnProperty('get') is false
     
    1424PASS Object.getOwnPropertyDescriptor(global, 'AnimationEvent').enumerable is false
    1525PASS Object.getOwnPropertyDescriptor(global, 'AnimationEvent').configurable is true
     26PASS Object.getOwnPropertyDescriptor(global, 'AnimationTimeline').value is AnimationTimeline
     27PASS Object.getOwnPropertyDescriptor(global, 'AnimationTimeline').hasOwnProperty('get') is false
     28PASS Object.getOwnPropertyDescriptor(global, 'AnimationTimeline').hasOwnProperty('set') is false
     29PASS Object.getOwnPropertyDescriptor(global, 'AnimationTimeline').enumerable is false
     30PASS Object.getOwnPropertyDescriptor(global, 'AnimationTimeline').configurable is true
    1631PASS Object.getOwnPropertyDescriptor(global, 'ApplicationCache').value is ApplicationCache
    1732PASS Object.getOwnPropertyDescriptor(global, 'ApplicationCache').hasOwnProperty('get') is false
     
    354369PASS Object.getOwnPropertyDescriptor(global, 'DocumentFragment').enumerable is false
    355370PASS Object.getOwnPropertyDescriptor(global, 'DocumentFragment').configurable is true
     371PASS Object.getOwnPropertyDescriptor(global, 'DocumentTimeline').value is DocumentTimeline
     372PASS Object.getOwnPropertyDescriptor(global, 'DocumentTimeline').hasOwnProperty('get') is false
     373PASS Object.getOwnPropertyDescriptor(global, 'DocumentTimeline').hasOwnProperty('set') is false
     374PASS Object.getOwnPropertyDescriptor(global, 'DocumentTimeline').enumerable is false
     375PASS Object.getOwnPropertyDescriptor(global, 'DocumentTimeline').configurable is true
    356376PASS Object.getOwnPropertyDescriptor(global, 'DocumentType').value is DocumentType
    357377PASS Object.getOwnPropertyDescriptor(global, 'DocumentType').hasOwnProperty('get') is false
     
    899919PASS Object.getOwnPropertyDescriptor(global, 'KeyboardEvent').enumerable is false
    900920PASS Object.getOwnPropertyDescriptor(global, 'KeyboardEvent').configurable is true
     921PASS Object.getOwnPropertyDescriptor(global, 'KeyframeEffect').value is KeyframeEffect
     922PASS Object.getOwnPropertyDescriptor(global, 'KeyframeEffect').hasOwnProperty('get') is false
     923PASS Object.getOwnPropertyDescriptor(global, 'KeyframeEffect').hasOwnProperty('set') is false
     924PASS Object.getOwnPropertyDescriptor(global, 'KeyframeEffect').enumerable is false
     925PASS Object.getOwnPropertyDescriptor(global, 'KeyframeEffect').configurable is true
    901926PASS Object.getOwnPropertyDescriptor(global, 'Location').value is Location
    902927PASS Object.getOwnPropertyDescriptor(global, 'Location').hasOwnProperty('get') is false
  • trunk/Source/JavaScriptCore/ChangeLog

    r201808 r201810  
     12016-06-08  Rawinder Singh  <rawinder.singh-webkit@cisra.canon.com.au>
     2
     3        [web-animations] Add Animatable, AnimationEffect, KeyframeEffect and Animation interface
     4        https://bugs.webkit.org/show_bug.cgi?id=156096
     5
     6        Reviewed by Dean Jackson.
     7
     8        Adds:
     9        - Animatable interface and implementation of getAnimations in Element
     10        - Interface and implementation for Document getAnimations method.
     11        - AnimationEffect interface and class stub.
     12        - KeyframeEffect interface and constructor implementation.
     13        - 'Animation' interface, constructor and query methods for effect and timeline.
     14        - Remove runtime condition on Web animation interfaces (compile time flag is specified).
     15
     16        * runtime/CommonIdentifiers.h:
     17
    1182016-06-08  Chris Dumez  <cdumez@apple.com>
    219
  • trunk/Source/JavaScriptCore/runtime/CommonIdentifiers.h

    r201544 r201810  
    2929// ways without repeating the list.
    3030#define JSC_COMMON_IDENTIFIERS_EACH_PROPERTY_NAME(macro) \
     31    macro(Animation) \
     32    macro(AnimationEffectReadOnly) \
    3133    macro(AnimationTimeline) \
    3234    macro(Array) \
     
    183185    macro(jettisonReason) \
    184186    macro(join) \
     187    macro(KeyframeEffect) \
    185188    macro(lastIndex) \
    186189    macro(length) \
  • trunk/Source/WebCore/CMakeLists.txt

    r201798 r201810  
    30173017if (ENABLE_WEB_ANIMATIONS)
    30183018    list(APPEND WebCore_IDL_FILES
     3019        "animation/Animatable.idl"
     3020        "animation/AnimationEffect.idl"
    30193021        "animation/AnimationTimeline.idl"
    30203022        "animation/DocumentAnimation.idl"
    30213023        "animation/DocumentTimeline.idl"
     3024        "animation/KeyframeEffect.idl"
     3025        "animation/WebAnimation.idl"
    30223026    )
    30233027
    30243028    list(APPEND WebCore_SOURCES
     3029        "animation/AnimationEffect.cpp"
    30253030        "animation/AnimationTimeline.cpp"
    30263031        "animation/DocumentAnimation.cpp"
    30273032        "animation/DocumentTimeline.cpp"
     3033        "animation/KeyframeEffect.cpp"
     3034        "animation/WebAnimation.cpp"
    30283035    )
    30293036endif ()
  • trunk/Source/WebCore/ChangeLog

    r201808 r201810  
     12016-06-08  Rawinder Singh  <rawinder.singh-webkit@cisra.canon.com.au>
     2
     3        [web-animations] Add Animatable, AnimationEffect, KeyframeEffect and Animation interface
     4        https://bugs.webkit.org/show_bug.cgi?id=156096
     5
     6        Reviewed by Dean Jackson.
     7
     8        Adds:
     9        - Animatable interface and implementation of getAnimations in Element
     10        - Interface and implementation for Document getAnimations method.
     11        - AnimationEffect interface and class stub.
     12        - KeyframeEffect interface and constructor implementation.
     13        - 'Animation' interface, constructor and query methods for effect and timeline.
     14        - Remove runtime condition on Web animation interfaces (compile time flag is specified).
     15
     16        Test: webanimations/Document.html
     17
     18        * CMakeLists.txt:
     19        * DerivedSources.make:
     20        * PlatformGTK.cmake:
     21        * WebCore.xcodeproj/project.pbxproj:
     22        * animation/Animatable.idl: Copied from Source/WebCore/animation/DocumentAnimation.idl.
     23        * animation/AnimationEffect.cpp: Copied from Source/WebCore/animation/AnimationTimeline.cpp.
     24        (WebCore::AnimationEffect::AnimationEffect):
     25        (WebCore::AnimationEffect::~AnimationEffect):
     26        (WebCore::AnimationEffect::setAnimation):
     27        (WebCore::AnimationEffect::isCurrent):
     28        (WebCore::AnimationEffect::isInEffect):
     29        * animation/AnimationEffect.h: Copied from Source/WebCore/animation/DocumentTimeline.cpp.
     30        * animation/AnimationEffect.idl: Copied from Source/WebCore/animation/AnimationTimeline.idl.
     31        * animation/AnimationTimeline.cpp:
     32        (WebCore::AnimationTimeline::destroy):
     33        (WebCore::AnimationTimeline::attachAnimation):
     34        (WebCore::AnimationTimeline::detachAnimation):
     35        * animation/AnimationTimeline.h:
     36        * animation/AnimationTimeline.idl:
     37        * animation/DocumentAnimation.cpp:
     38        (WebCore::DocumentAnimation::timeline):
     39        (WebCore::DocumentAnimation::getAnimations):
     40        (WebCore::DocumentAnimation::addAnimation):
     41        (WebCore::DocumentAnimation::removeAnimation):
     42        * animation/DocumentAnimation.h:
     43        (WebCore::DocumentAnimation::getAnimations):
     44        * animation/DocumentAnimation.idl:
     45        * animation/DocumentTimeline.cpp:
     46        (WebCore::DocumentTimeline::create):
     47        (WebCore::DocumentTimeline::DocumentTimeline):
     48        (WebCore::DocumentTimeline::attach):
     49        (WebCore::DocumentTimeline::detach):
     50        * animation/DocumentTimeline.h:
     51        * animation/DocumentTimeline.idl:
     52        * animation/KeyframeEffect.cpp: Copied from Source/WebCore/animation/DocumentTimeline.cpp.
     53        (WebCore::KeyframeEffect::create):
     54        (WebCore::KeyframeEffect::KeyframeEffect):
     55        (WebCore::KeyframeEffect::~KeyframeEffect):
     56        * animation/KeyframeEffect.h: Copied from Source/WebCore/animation/DocumentTimeline.h.
     57        * animation/KeyframeEffect.idl: Copied from Source/WebCore/animation/AnimationTimeline.idl.
     58        * animation/WebAnimation.cpp: Copied from Source/WebCore/animation/DocumentAnimation.cpp.
     59        (WebCore::WebAnimation::create):
     60        (WebCore::WebAnimation::WebAnimation):
     61        (WebCore::WebAnimation::~WebAnimation):
     62        * animation/WebAnimation.h: Copied from Source/WebCore/animation/DocumentAnimation.h.
     63        * animation/WebAnimation.idl: Copied from Source/WebCore/animation/DocumentTimeline.idl.
     64        * bindings/scripts/CodeGeneratorGObject.pm:
     65        * dom/Element.cpp:
     66        (WebCore::Element::getAnimations):
     67        * dom/Element.h:
     68        * dom/Element.idl:
     69
    1702016-06-08  Chris Dumez  <cdumez@apple.com>
    271
  • trunk/Source/WebCore/DerivedSources.make

    r201422 r201810  
    224224    $(WebCore)/Modules/websockets/CloseEvent.idl \
    225225    $(WebCore)/Modules/websockets/WebSocket.idl \
     226    $(WebCore)/animation/Animatable.idl \
     227    $(WebCore)/animation/AnimationEffect.idl \
    226228    $(WebCore)/animation/AnimationTimeline.idl \
    227229    $(WebCore)/animation/DocumentAnimation.idl \
    228230    $(WebCore)/animation/DocumentTimeline.idl \
     231    $(WebCore)/animation/KeyframeEffect.idl \
     232    $(WebCore)/animation/WebAnimation.idl \
    229233    $(WebCore)/crypto/CryptoKey.idl \
    230234    $(WebCore)/crypto/CryptoKeyPair.idl \
  • trunk/Source/WebCore/PlatformGTK.cmake

    r201038 r201810  
    593593if (ENABLE_WEB_ANIMATIONS)
    594594    list(APPEND GObjectDOMBindingsUnstable_IDL_FILES
     595        animation/Animatable.idl
     596        animation/AnimationEffect.idl
    595597        animation/AnimationTimeline.idl
    596598        animation/DocumentAnimation.idl
    597599        animation/DocumentTimeline.idl
     600        animation/KeyframeEffect.idl
     601        animation/WebAnimation.idl
    598602    )
    599603endif ()
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r201798 r201810  
    577577                0FFD4D6118651FA300512F6E /* AsyncScrollingCoordinator.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FFD4D5F18651FA300512F6E /* AsyncScrollingCoordinator.h */; settings = {ATTRIBUTES = (Private, ); }; };
    578578                10FB084B14E15C7E00A3DB98 /* PublicURLManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 10FB084A14E15C7E00A3DB98 /* PublicURLManager.h */; };
     579                120DE3ED1C86CA3E00B6D4DD /* WebAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 120DE3EA1C80161C00B6D4DD /* WebAnimation.cpp */; };
     580                120DE3F11C86CCC600B6D4DD /* AnimationEffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 120DE3EE1C86CCBD00B6D4DD /* AnimationEffect.cpp */; };
     581                120DE3F81C87C5A800B6D4DD /* JSWebAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 120DE3F51C87C58E00B6D4DD /* JSWebAnimation.h */; };
     582                120DE3F91C87C5AB00B6D4DD /* JSWebAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 120DE3F41C87C58E00B6D4DD /* JSWebAnimation.cpp */; };
     583                120DE3FD1C87E18400B6D4DD /* JSAnimationEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 120DE3FC1C87E17900B6D4DD /* JSAnimationEffect.h */; };
     584                120DE3FE1C87E18800B6D4DD /* JSAnimationEffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 120DE3FB1C87E17900B6D4DD /* JSAnimationEffect.cpp */; };
    579585                1221E0471BFC3D2C006A1A00 /* DocumentAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1221E0411BFC3D2C006A1A00 /* DocumentAnimation.cpp */; };
    580586                1221E0481BFC3D2C006A1A00 /* DocumentAnimation.h in Headers */ = {isa = PBXBuildFile; fileRef = 1221E0421BFC3D2C006A1A00 /* DocumentAnimation.h */; };
     
    589595                1221E06D1C03D224006A1A00 /* JSAnimationTimeline.h in Headers */ = {isa = PBXBuildFile; fileRef = 1221E06B1C03D224006A1A00 /* JSAnimationTimeline.h */; };
    590596                1221E0731C03E4C2006A1A00 /* JSAnimationTimelineCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1221E0721C03E4C2006A1A00 /* JSAnimationTimelineCustom.cpp */; };
     597                12A253DB1C8FF7DC00C22295 /* KeyframeEffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12A253D81C8FF7CC00C22295 /* KeyframeEffect.cpp */; };
     598                12A253E01C8FFF6600C22295 /* JSKeyframeEffect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12A253DE1C8FFF5700C22295 /* JSKeyframeEffect.cpp */; };
     599                12A253E11C8FFF6600C22295 /* JSKeyframeEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 12A253DF1C8FFF5700C22295 /* JSKeyframeEffect.h */; };
     600                12A253E21C8FFF6600C22295 /* JSAnimatable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 12A253DC1C8FFF4200C22295 /* JSAnimatable.cpp */; };
     601                12A253E31C8FFF6600C22295 /* JSAnimatable.h in Headers */ = {isa = PBXBuildFile; fileRef = 12A253DD1C8FFF4200C22295 /* JSAnimatable.h */; };
    591602                1400D7A817136EA70077CE05 /* ScriptWrappableInlines.h in Headers */ = {isa = PBXBuildFile; fileRef = 1400D7A717136EA70077CE05 /* ScriptWrappableInlines.h */; settings = {ATTRIBUTES = (Private, ); }; };
    592603                1402645E0AFDC19B005919E2 /* LoggingMac.mm in Sources */ = {isa = PBXBuildFile; fileRef = 1402645D0AFDC19B005919E2 /* LoggingMac.mm */; };
     
    79988009                0FFD4D5F18651FA300512F6E /* AsyncScrollingCoordinator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsyncScrollingCoordinator.h; sourceTree = "<group>"; };
    79998010                10FB084A14E15C7E00A3DB98 /* PublicURLManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PublicURLManager.h; sourceTree = "<group>"; };
     8011                120DE3EA1C80161C00B6D4DD /* WebAnimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebAnimation.cpp; sourceTree = "<group>"; };
     8012                120DE3EB1C80161C00B6D4DD /* WebAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebAnimation.h; sourceTree = "<group>"; };
     8013                120DE3EC1C80161C00B6D4DD /* WebAnimation.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = WebAnimation.idl; sourceTree = "<group>"; };
     8014                120DE3EE1C86CCBD00B6D4DD /* AnimationEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AnimationEffect.cpp; sourceTree = "<group>"; };
     8015                120DE3EF1C86CCBD00B6D4DD /* AnimationEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AnimationEffect.h; sourceTree = "<group>"; };
     8016                120DE3F41C87C58E00B6D4DD /* JSWebAnimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebAnimation.cpp; sourceTree = "<group>"; };
     8017                120DE3F51C87C58E00B6D4DD /* JSWebAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebAnimation.h; sourceTree = "<group>"; };
     8018                120DE3FA1C87D1F100B6D4DD /* AnimationEffect.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AnimationEffect.idl; sourceTree = "<group>"; };
     8019                120DE3FB1C87E17900B6D4DD /* JSAnimationEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAnimationEffect.cpp; sourceTree = "<group>"; };
     8020                120DE3FC1C87E17900B6D4DD /* JSAnimationEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAnimationEffect.h; sourceTree = "<group>"; };
     8021                120DE4011C8E997A00B6D4DD /* Animatable.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Animatable.idl; sourceTree = "<group>"; };
    80008022                1221E0411BFC3D2C006A1A00 /* DocumentAnimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DocumentAnimation.cpp; sourceTree = "<group>"; };
    80018023                1221E0421BFC3D2C006A1A00 /* DocumentAnimation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DocumentAnimation.h; sourceTree = "<group>"; };
     
    80148036                1221E06B1C03D224006A1A00 /* JSAnimationTimeline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAnimationTimeline.h; sourceTree = "<group>"; };
    80158037                1221E0721C03E4C2006A1A00 /* JSAnimationTimelineCustom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAnimationTimelineCustom.cpp; sourceTree = "<group>"; };
     8038                12A253D81C8FF7CC00C22295 /* KeyframeEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KeyframeEffect.cpp; sourceTree = "<group>"; };
     8039                12A253D91C8FF7CC00C22295 /* KeyframeEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyframeEffect.h; sourceTree = "<group>"; };
     8040                12A253DA1C8FF7CC00C22295 /* KeyframeEffect.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = KeyframeEffect.idl; sourceTree = "<group>"; };
     8041                12A253DC1C8FFF4200C22295 /* JSAnimatable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAnimatable.cpp; sourceTree = "<group>"; };
     8042                12A253DD1C8FFF4200C22295 /* JSAnimatable.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAnimatable.h; sourceTree = "<group>"; };
     8043                12A253DE1C8FFF5700C22295 /* JSKeyframeEffect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSKeyframeEffect.cpp; sourceTree = "<group>"; };
     8044                12A253DF1C8FFF5700C22295 /* JSKeyframeEffect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSKeyframeEffect.h; sourceTree = "<group>"; };
    80168045                1400D7A717136EA70077CE05 /* ScriptWrappableInlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptWrappableInlines.h; sourceTree = "<group>"; };
    80178046                1402645D0AFDC19B005919E2 /* LoggingMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.objcpp; path = LoggingMac.mm; sourceTree = "<group>"; };
     
    1596815997                        isa = PBXGroup;
    1596915998                        children = (
     15999                                120DE4011C8E997A00B6D4DD /* Animatable.idl */,
     16000                                120DE3EE1C86CCBD00B6D4DD /* AnimationEffect.cpp */,
     16001                                120DE3EF1C86CCBD00B6D4DD /* AnimationEffect.h */,
     16002                                120DE3FA1C87D1F100B6D4DD /* AnimationEffect.idl */,
    1597016003                                1221E0611C02D623006A1A00 /* AnimationTimeline.cpp */,
    1597116004                                1221E0621C02D623006A1A00 /* AnimationTimeline.h */,
     
    1597716010                                1221E0451BFC3D2C006A1A00 /* DocumentTimeline.h */,
    1597816011                                1221E0461BFC3D2C006A1A00 /* DocumentTimeline.idl */,
     16012                                12A253D81C8FF7CC00C22295 /* KeyframeEffect.cpp */,
     16013                                12A253D91C8FF7CC00C22295 /* KeyframeEffect.h */,
     16014                                12A253DA1C8FF7CC00C22295 /* KeyframeEffect.idl */,
     16015                                120DE3EA1C80161C00B6D4DD /* WebAnimation.cpp */,
     16016                                120DE3EB1C80161C00B6D4DD /* WebAnimation.h */,
     16017                                120DE3EC1C80161C00B6D4DD /* WebAnimation.idl */,
    1597916018                        );
    1598016019                        path = animation;
     
    1598416023                        isa = PBXGroup;
    1598516024                        children = (
     16025                                12A253DE1C8FFF5700C22295 /* JSKeyframeEffect.cpp */,
     16026                                12A253DF1C8FFF5700C22295 /* JSKeyframeEffect.h */,
     16027                                12A253DC1C8FFF4200C22295 /* JSAnimatable.cpp */,
     16028                                12A253DD1C8FFF4200C22295 /* JSAnimatable.h */,
     16029                                120DE3FB1C87E17900B6D4DD /* JSAnimationEffect.cpp */,
     16030                                120DE3FC1C87E17900B6D4DD /* JSAnimationEffect.h */,
     16031                                120DE3F41C87C58E00B6D4DD /* JSWebAnimation.cpp */,
     16032                                120DE3F51C87C58E00B6D4DD /* JSWebAnimation.h */,
    1598616033                                1221E06A1C03D224006A1A00 /* JSAnimationTimeline.cpp */,
    1598716034                                1221E06B1C03D224006A1A00 /* JSAnimationTimeline.h */,
     
    2527825325                                A10D7FEC1C2676D100C6C115 /* CFNetworkConnectionCacheSPI.h in Headers */,
    2527925326                                CE12525B1A1C018200864480 /* CFNetworkSPI.h in Headers */,
     25327                                120DE3FD1C87E18400B6D4DD /* JSAnimationEffect.h in Headers */,
    2528025328                                E1A8E56717552B2A007488E7 /* CFURLExtras.h in Headers */,
    2528125329                                FE36FD1516C7826500F887C1 /* ChangeVersionData.h in Headers */,
     
    2534225390                                262391361A648CEE007251A3 /* ContentExtensionsDebugging.h in Headers */,
    2534325391                                51FB67DC1AE6B82F00D06C5A /* ContentExtensionStyleSheet.h in Headers */,
     25392                                120DE3F81C87C5A800B6D4DD /* JSWebAnimation.h in Headers */,
    2534425393                                A149786F1ABAF33800CEF7E4 /* ContentFilter.h in Headers */,
    2534525394                                A14090FD1AA51E480091191A /* ContentFilterUnblockHandler.h in Headers */,
     
    2540025449                                E1C6571F1816E50300256CDD /* CryptoAlgorithmHmacParams.h in Headers */,
    2540125450                                E1C657251816E69D00256CDD /* CryptoAlgorithmIdentifier.h in Headers */,
     25451                                12A253E11C8FFF6600C22295 /* JSKeyframeEffect.h in Headers */,
    2540225452                                E1C657271816F9FE00256CDD /* CryptoAlgorithmParameters.h in Headers */,
    2540325453                                E1FF8F6D180DB5BE00132674 /* CryptoAlgorithmRegistry.h in Headers */,
     
    2648826538                                E462A4A1113E71BE004A4220 /* IntPointHash.h in Headers */,
    2648926539                                B27535740B053814002CE64F /* IntRect.h in Headers */,
     26540                                12A253E31C8FFF6600C22295 /* JSAnimatable.h in Headers */,
    2649026541                                A2B9217316C5CC420041DCD9 /* IntRectExtent.h in Headers */,
    2649126542                                E134F5AB12EE343F004EC58D /* IntRectHash.h in Headers */,
     
    2946029511                                A1ED778C1BE3294000DC1791 /* Device.cpp in Sources */,
    2946129512                                CCC2B51515F613060048CDD6 /* DeviceController.cpp in Sources */,
     29513                                120DE3F11C86CCC600B6D4DD /* AnimationEffect.cpp in Sources */,
    2946229514                                31EAF97F121435A400E7C1BF /* DeviceMotionClientIOS.mm in Sources */,
    2946329515                                31FB1A58120A5D0600DC02A0 /* DeviceMotionController.cpp in Sources */,
     
    3016330215                                B27535600B053814002CE64F /* IntPointCG.cpp in Sources */,
    3016430216                                B275357C0B053814002CE64F /* IntPointMac.mm in Sources */,
     30217                                120DE3FE1C87E18800B6D4DD /* JSAnimationEffect.cpp in Sources */,
    3016530218                                B27535730B053814002CE64F /* IntRect.cpp in Sources */,
    3016630219                                B27535610B053814002CE64F /* IntRectCG.cpp in Sources */,
     
    3043530488                                1AE2ABA80A1CE90500B42B25 /* JSHTMLParamElement.cpp in Sources */,
    3043630489                                BC3D85BB1C0E2E7700D3B610 /* JSHTMLPictureElement.cpp in Sources */,
     30490                                12A253E21C8FFF6600C22295 /* JSAnimatable.cpp in Sources */,
    3043730491                                1AE2ABAA0A1CE90500B42B25 /* JSHTMLPreElement.cpp in Sources */,
    3043830492                                A4226E5A1163D667008B8397 /* JSHTMLProgressElement.cpp in Sources */,
     
    3063930693                                BC98A27D0C0C9950004BEBF7 /* JSStyleSheetCustom.cpp in Sources */,
    3064030694                                A84EBD840CB8C97700079609 /* JSStyleSheetList.cpp in Sources */,
     30695                                120DE3F91C87C5AB00B6D4DD /* JSWebAnimation.cpp in Sources */,
    3064130696                                A84EBD780CB8C89200079609 /* JSStyleSheetListCustom.cpp in Sources */,
    3064230697                                E1FF8F64180745D800132674 /* JSSubtleCrypto.cpp in Sources */,
     
    3088730942                                1A762C750A074F2600989F5B /* JSXPathExpression.cpp in Sources */,
    3088830943                                1A762C770A074F2600989F5B /* JSXPathNSResolver.cpp in Sources */,
     30944                                12A253DB1C8FF7DC00C22295 /* KeyframeEffect.cpp in Sources */,
    3088930945                                1A762C790A074F2600989F5B /* JSXPathResult.cpp in Sources */,
    3089030946                                A1C7FAA2133A5D3500D6732D /* JSXPathResultCustom.cpp in Sources */,
     
    3093730993                                7EE6846812D26E3800E79415 /* LoaderRunLoopCF.cpp in Sources */,
    3093830994                                51ABF64D16392E2800132A7A /* LoaderStrategy.cpp in Sources */,
     30995                                12A253E01C8FFF6600C22295 /* JSKeyframeEffect.cpp in Sources */,
    3093930996                                06E81EEC0AB5DA9700C87837 /* LocalCurrentGraphicsContext.mm in Sources */,
    3094030997                                F5973DE115CFB2030027F804 /* LocaleMac.mm in Sources */,
     
    3096931026                                417253AA1354BBBC00360F2A /* MediaControlElements.cpp in Sources */,
    3097031027                                DEBCCDD516646EB200A452E1 /* MediaControlElementTypes.cpp in Sources */,
     31028                                120DE3ED1C86CA3E00B6D4DD /* WebAnimation.cpp in Sources */,
    3097131029                                CD27F6E7145770D30078207D /* MediaController.cpp in Sources */,
    3097231030                                5E5E2B131CFC3E70000C0D85 /* RTCRtpTransceiver.cpp in Sources */,
  • trunk/Source/WebCore/animation/Animatable.idl

    r201809 r201810  
    2828
    2929[
    30     EnabledAtRuntime=WebAnimations,
    31     Conditional=WEB_ANIMATIONS
    32 ] partial interface Document {
     30    Conditional=WEB_ANIMATIONS,
     31    NoInterfaceObject
     32] interface Animatable {
    3333#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
    34     readonly attribute DocumentTimeline timeline;
     34    // FIXME: Incomplete interface (implement animate).
     35    sequence<WebAnimation> getAnimations();
    3536#endif
    3637};
  • trunk/Source/WebCore/animation/AnimationEffect.cpp

    r201809 r201810  
    2828
    2929#include "config.h"
    30 #include "AnimationTimeline.h"
     30#include "AnimationEffect.h"
    3131
    3232#if ENABLE(WEB_ANIMATIONS)
    3333
    34 #include "DocumentTimeline.h"
     34#include "WebAnimation.h"
    3535
    3636namespace WebCore {
    3737
    38 AnimationTimeline::AnimationTimeline(ClassType classType)
    39     : m_classType(classType)
    40 {
    41     // NOTE: We only have one type of subclass at the moment.
    42     ASSERT(classType == DocumentTimelineClass);
    43 }
    44 
    45 AnimationTimeline::~AnimationTimeline()
     38AnimationEffect::AnimationEffect()
    4639{
    4740}
    4841
    49 void AnimationTimeline::destroy()
     42AnimationEffect::~AnimationEffect()
    5043{
    51     if (classType() == DocumentTimelineClass) {
    52         delete downcast<DocumentTimeline>(this);
    53         return;
    54     }
    55    
    56     ASSERT_NOT_REACHED();
    57     return;
     44}
     45
     46void AnimationEffect::setAnimation(WebAnimation* animation)
     47{
     48    m_animation = animation ? animation->createWeakPtr() : WeakPtr<WebAnimation>();
     49}
     50
     51bool AnimationEffect::isCurrent() const
     52{
     53    // FIXME: Calculate whether animation is current according to spec.
     54    return true;
     55}
     56
     57bool AnimationEffect::isInEffect() const
     58{
     59    // FIXME: Calculate whether animation is in effect according to spec.
     60    return false;
    5861}
    5962
  • trunk/Source/WebCore/animation/AnimationEffect.h

    r201809 r201810  
    2727 */
    2828
    29 #include "config.h"
    30 #include "DocumentTimeline.h"
     29#pragma once
    3130
    3231#if ENABLE(WEB_ANIMATIONS)
    3332
     33#include "WebAnimation.h"
     34#include <wtf/RefCounted.h>
     35#include <wtf/RefPtr.h>
     36
    3437namespace WebCore {
    3538
    36 Ref<DocumentTimeline> DocumentTimeline::create(double originTime)
    37 {
    38     return adoptRef(*new DocumentTimeline(originTime));
    39 }
     39class AnimationEffect : public RefCounted<AnimationEffect> {
     40public:
     41    AnimationEffect();
     42    virtual ~AnimationEffect();
    4043
    41 DocumentTimeline::DocumentTimeline(double originTime)
    42     : AnimationTimeline(DocumentTimelineClass)
    43     , m_originTime(originTime)
    44 {
    45     UNUSED_PARAM(m_originTime);
    46 }
     44    void setAnimation(WebAnimation*);
    4745
    48 DocumentTimeline::~DocumentTimeline()
    49 {
    50 }
     46    bool isCurrent() const;
     47    bool isInEffect() const;
     48
     49private:
     50    WeakPtr<WebAnimation> m_animation;
     51};
    5152
    5253} // namespace WebCore
  • trunk/Source/WebCore/animation/AnimationEffect.idl

    r201809 r201810  
    2828
    2929[
    30     EnabledAtRuntime=WebAnimations,
    3130    Conditional=WEB_ANIMATIONS,
    32     CustomToJSObject,
    33     ObjCPolymorphic,
    34     ImplementationLacksVTable
    35 ] interface AnimationTimeline {
    36     // FIX: Only a stub at the moment.
     31    InterfaceName=AnimationEffectReadOnly,
     32    SkipVTableValidation
     33] interface AnimationEffect {
     34    // FIXME: Stub only at the moment.
    3735};
    38 
  • trunk/Source/WebCore/animation/AnimationTimeline.cpp

    r197058 r201810  
    5555   
    5656    ASSERT_NOT_REACHED();
    57     return;
     57}
     58
     59void AnimationTimeline::attachAnimation(WebAnimation& animation)
     60{
     61    if (classType() == DocumentTimelineClass) {
     62        downcast<DocumentTimeline>(*this).attach(animation);
     63        return;
     64    }
     65
     66    ASSERT_NOT_REACHED();
     67}
     68
     69void AnimationTimeline::detachAnimation(WebAnimation& animation)
     70{
     71    if (classType() == DocumentTimelineClass) {
     72        downcast<DocumentTimeline>(*this).detach(animation);
     73        return;
     74    }
     75   
     76    ASSERT_NOT_REACHED();
    5877}
    5978
  • trunk/Source/WebCore/animation/AnimationTimeline.h

    r197058 r201810  
    2727 */
    2828
    29 #ifndef AnimationTimeline_h
    30 #define AnimationTimeline_h
     29#pragma once
    3130
    3231#if ENABLE(WEB_ANIMATIONS)
     
    3736
    3837namespace WebCore {
     38
     39class WebAnimation;
    3940
    4041class AnimationTimeline : public RefCounted<AnimationTimeline> {
     
    4950   
    5051    bool isDocumentTimeline() const { return m_classType == DocumentTimelineClass; }
     52
     53    void attachAnimation(WebAnimation&);
     54    void detachAnimation(WebAnimation&);
    5155
    5256protected:
     
    7680
    7781#endif // ENABLE(WEB_ANIMATIONS)
    78 
    79 #endif // AnimationTimeline_h
  • trunk/Source/WebCore/animation/AnimationTimeline.idl

    r197058 r201810  
    2828
    2929[
    30     EnabledAtRuntime=WebAnimations,
    3130    Conditional=WEB_ANIMATIONS,
    3231    CustomToJSObject,
     
    3433    ImplementationLacksVTable
    3534] interface AnimationTimeline {
    36     // FIX: Only a stub at the moment.
     35    // FIXME: Only a stub at the moment.
    3736};
    3837
  • trunk/Source/WebCore/animation/DocumentAnimation.cpp

    r197058 r201810  
    4949    auto* documentAnimation = DocumentAnimation::from(&document);
    5050    if (!documentAnimation->m_defaultTimeline)
    51         documentAnimation->m_defaultTimeline = DocumentTimeline::create(0.0);
     51        documentAnimation->m_defaultTimeline = DocumentTimeline::create(document, 0.0);
    5252    return documentAnimation->m_defaultTimeline.get();
    5353}
     
    6969}
    7070
     71WebAnimationVector DocumentAnimation::getAnimations(std::function<bool(const AnimationEffect&)> effect_test) const
     72{
     73    WebAnimationVector animations;
     74
     75    auto sortBasedOnPriority = [](const RefPtr<WebAnimation>& a, const RefPtr<WebAnimation>& b)
     76    {
     77        // FIXME: Sort using the composite order as described in the spec.
     78        UNUSED_PARAM(a);
     79        UNUSED_PARAM(b);
     80        return true;
     81    };
     82
     83    for (auto& animation : m_animations.values()) {
     84        if (animation && animation->effect()) {
     85            const AnimationEffect& effect = *animation->effect();
     86            if ((effect.isCurrent() || effect.isInEffect()) && effect_test(effect))
     87                animations.append(animation.get());
     88        }
     89    }
     90    std::sort(animations.begin(), animations.end(), sortBasedOnPriority);
     91
     92    return animations;
     93}
     94
     95void DocumentAnimation::addAnimation(WebAnimation& animation)
     96{
     97    ASSERT(!m_animations.contains(&animation));
     98    m_animations.add(&animation, animation.createWeakPtr());
     99}
     100
     101void DocumentAnimation::removeAnimation(WebAnimation& animation)
     102{
     103    m_animations.remove(&animation);
     104}
     105
     106WebAnimationVector DocumentAnimation::getAnimations(Document& document)
     107{
     108    return DocumentAnimation::from(&document)->getAnimations();
     109}
     110
    71111} // namespace WebCore
    72112
  • trunk/Source/WebCore/animation/DocumentAnimation.h

    r197058 r201810  
    2727 */
    2828
    29 #ifndef DocumentAnimation_h
    30 #define DocumentAnimation_h
     29#pragma once
    3130
    3231#if ENABLE(WEB_ANIMATIONS)
    3332
     33#include "AnimationEffect.h"
    3434#include "Supplementable.h"
     35#include "WebAnimation.h"
     36#include <wtf/HashMap.h>
     37#include <wtf/WeakPtr.h>
    3538
    3639namespace WebCore {
     
    4649    static DocumentAnimation* from(Document*);
    4750    static DocumentTimeline* timeline(Document&);
     51    static WebAnimationVector getAnimations(Document&);
     52
     53    WebAnimationVector getAnimations(std::function<bool(const AnimationEffect&)> = [](const AnimationEffect&) { return true; }) const;
     54
     55    void addAnimation(WebAnimation&);
     56    void removeAnimation(WebAnimation&);
    4857
    4958private:
     
    5160
    5261    RefPtr<DocumentTimeline> m_defaultTimeline;
     62
     63    HashMap<WebAnimation*, WeakPtr<WebAnimation>> m_animations;
    5364};
    5465
     
    5667
    5768#endif // ENABLE(WEB_ANIMATIONS)
    58 
    59 #endif // DocumentAnimation_h
  • trunk/Source/WebCore/animation/DocumentAnimation.idl

    r197058 r201810  
    2828
    2929[
    30     EnabledAtRuntime=WebAnimations,
    3130    Conditional=WEB_ANIMATIONS
    3231] partial interface Document {
    3332#if !defined(LANGUAGE_OBJECTIVE_C) || !LANGUAGE_OBJECTIVE_C
    3433    readonly attribute DocumentTimeline timeline;
     34    sequence<WebAnimation> getAnimations();
    3535#endif
    3636};
  • trunk/Source/WebCore/animation/DocumentTimeline.cpp

    r200789 r201810  
    3232#if ENABLE(WEB_ANIMATIONS)
    3333
     34#include "Document.h"
     35#include "DocumentAnimation.h"
     36#include "WebAnimation.h"
     37
    3438namespace WebCore {
    3539
    36 Ref<DocumentTimeline> DocumentTimeline::create(double originTime)
     40Ref<DocumentTimeline> DocumentTimeline::create(Document& context, double originTime)
    3741{
    38     return adoptRef(*new DocumentTimeline(originTime));
     42    return adoptRef(*new DocumentTimeline(context, originTime));
    3943}
    4044
    41 DocumentTimeline::DocumentTimeline(double originTime)
     45DocumentTimeline::DocumentTimeline(Document& context, double originTime)
    4246    : AnimationTimeline(DocumentTimelineClass)
     47    , m_document(context.createWeakPtr())
    4348    , m_originTime(originTime)
    4449{
     
    5055}
    5156
     57void DocumentTimeline::attach(WebAnimation& animation)
     58{
     59    ASSERT(animation.timeline() == this);
     60    ASSERT(m_document);
     61
     62    if (!m_document)
     63        return;
     64
     65    auto* document = DocumentAnimation::from(m_document.get());
     66    if (document)
     67        document->addAnimation(animation);
     68}
     69
     70void DocumentTimeline::detach(WebAnimation& animation)
     71{
     72    ASSERT(m_document);
     73
     74    if (!m_document)
     75        return;
     76
     77    auto* document = DocumentAnimation::from(m_document.get());
     78    if (document)
     79        document->removeAnimation(animation);
     80}
     81
    5282} // namespace WebCore
    5383
  • trunk/Source/WebCore/animation/DocumentTimeline.h

    r200789 r201810  
    2727 */
    2828
    29 #ifndef DocumentTimeline_h
    30 #define DocumentTimeline_h
     29#pragma once
    3130
    3231#if ENABLE(WEB_ANIMATIONS)
    3332
    3433#include "AnimationTimeline.h"
     34#include <wtf/WeakPtr.h>
    3535
    3636namespace WebCore {
    3737
     38class Document;
     39
    3840class DocumentTimeline final : public AnimationTimeline {
    3941public:
    40     static Ref<DocumentTimeline> create(double);
     42    static Ref<DocumentTimeline> create(Document&, double);
    4143    ~DocumentTimeline();
    4244
     45    void attach(WebAnimation&);
     46    void detach(WebAnimation&);
     47
    4348protected:
    44     DocumentTimeline(double);
     49    DocumentTimeline(Document&, double);
    4550   
    4651private:
     52    WeakPtr<Document> m_document;
    4753    double m_originTime;
    4854};
     
    5359
    5460#endif // ENABLE(WEB_ANIMATIONS)
    55 
    56 #endif // DocumentTimeline_h
  • trunk/Source/WebCore/animation/DocumentTimeline.idl

    r197058 r201810  
    2828
    2929[
    30     EnabledAtRuntime=WebAnimations,
    3130    Conditional=WEB_ANIMATIONS,
    3231    ImplementationLacksVTable,
    33     // FIX: Should be DOMHighResTimeStamp rather than double (e.g. see Performance.now()).
    34     Constructor(double originTime)
     32    // FIXME: Should be DOMHighResTimeStamp rather than double (e.g. see Performance.now()).
     33    Constructor(double originTime),
     34    ConstructorCallWith=Document
    3535] interface DocumentTimeline : AnimationTimeline {
    3636};
  • trunk/Source/WebCore/animation/KeyframeEffect.cpp

    r201809 r201810  
    2828
    2929#include "config.h"
    30 #include "DocumentTimeline.h"
     30#include "KeyframeEffect.h"
    3131
    3232#if ENABLE(WEB_ANIMATIONS)
    3333
     34#include "Element.h"
     35#include <wtf/Ref.h>
     36
    3437namespace WebCore {
    3538
    36 Ref<DocumentTimeline> DocumentTimeline::create(double originTime)
     39RefPtr<KeyframeEffect> KeyframeEffect::create(Element* target)
    3740{
    38     return adoptRef(*new DocumentTimeline(originTime));
     41    if (!target) {
     42        // FIXME: Support null animation target.
     43        return nullptr;
     44    }
     45
     46    return adoptRef(new KeyframeEffect(target));
    3947}
    4048
    41 DocumentTimeline::DocumentTimeline(double originTime)
    42     : AnimationTimeline(DocumentTimelineClass)
    43     , m_originTime(originTime)
     49KeyframeEffect::KeyframeEffect(Element* target)
     50    : m_target(target)
    4451{
    45     UNUSED_PARAM(m_originTime);
    4652}
    4753
    48 DocumentTimeline::~DocumentTimeline()
     54KeyframeEffect::~KeyframeEffect()
    4955{
    5056}
  • trunk/Source/WebCore/animation/KeyframeEffect.h

    r201809 r201810  
    2727 */
    2828
    29 #ifndef DocumentTimeline_h
    30 #define DocumentTimeline_h
     29#pragma once
    3130
    3231#if ENABLE(WEB_ANIMATIONS)
    3332
    34 #include "AnimationTimeline.h"
     33#include "AnimationEffect.h"
    3534
    3635namespace WebCore {
    3736
    38 class DocumentTimeline final : public AnimationTimeline {
     37class Element;
     38
     39class KeyframeEffect final : public AnimationEffect {
    3940public:
    40     static Ref<DocumentTimeline> create(double);
    41     ~DocumentTimeline();
     41    static RefPtr<KeyframeEffect> create(Element*);
     42    ~KeyframeEffect() override;
    4243
    43 protected:
    44     DocumentTimeline(double);
    45    
     44    Element* target() const { return m_target.get(); }
     45
    4646private:
    47     double m_originTime;
     47    KeyframeEffect(Element*);
     48
     49    // FIXME: Ensure that there is no cyclic reference from Element to KeyframeEffect.
     50    RefPtr<Element> m_target;
    4851};
    4952
    5053} // namespace WebCore
    5154
    52 SPECIALIZE_TYPE_TRAITS_ANIMATION_TIMELINE(DocumentTimeline, isDocumentTimeline())
    53 
    5455#endif // ENABLE(WEB_ANIMATIONS)
    55 
    56 #endif // DocumentTimeline_h
  • trunk/Source/WebCore/animation/KeyframeEffect.idl

    r201809 r201810  
    2828
    2929[
    30     EnabledAtRuntime=WebAnimations,
    3130    Conditional=WEB_ANIMATIONS,
    32     CustomToJSObject,
    33     ObjCPolymorphic,
    34     ImplementationLacksVTable
    35 ] interface AnimationTimeline {
    36     // FIX: Only a stub at the moment.
     31    // FIX: Constructor stub only at the moment (should accept PseudoElement target, frames and options).
     32    Constructor([Default=Undefined] Element? target)
     33    // FIX: Add interface for and inherit from KeyframeEffectReadOnly.
     34] interface KeyframeEffect : AnimationEffect {
     35    // FIX: Stub only at the moment.
    3736};
    38 
  • trunk/Source/WebCore/animation/WebAnimation.cpp

    r201809 r201810  
    2828
    2929#include "config.h"
    30 #include "DocumentAnimation.h"
     30#include "WebAnimation.h"
    3131
    3232#if ENABLE(WEB_ANIMATIONS)
    3333
    34 #include "Document.h"
     34#include "AnimationEffect.h"
    3535#include "DocumentTimeline.h"
     36#include <wtf/Ref.h>
    3637
    3738namespace WebCore {
    3839
    39 DocumentAnimation::DocumentAnimation()
     40RefPtr<WebAnimation> WebAnimation::create(AnimationEffect* effect, AnimationTimeline* timeline)
    4041{
     42    if (!effect) {
     43        // FIXME: Support creating animations with null effect.
     44        return nullptr;
     45    }
     46
     47    if (!timeline) {
     48        // FIXME: Support creating animations without a timeline.
     49        return nullptr;
     50    }
     51
     52    if (!timeline->isDocumentTimeline()) {
     53        // FIXME: Currently only support DocumentTimeline.
     54        return nullptr;
     55    }
     56
     57    return adoptRef(new WebAnimation(effect, timeline));
    4158}
    4259
    43 DocumentAnimation::~DocumentAnimation()
     60WebAnimation::WebAnimation(AnimationEffect* effect, AnimationTimeline* timeline)
     61    : m_effect(effect)
     62    , m_timeline(timeline)
     63    , m_weakPtrFactory(this)
    4464{
     65    if (m_effect)
     66        m_effect->setAnimation(this);
     67
     68    if (m_timeline)
     69        m_timeline->attachAnimation(*this);
    4570}
    4671
    47 DocumentTimeline* DocumentAnimation::timeline(Document& document)
     72WebAnimation::~WebAnimation()
    4873{
    49     auto* documentAnimation = DocumentAnimation::from(&document);
    50     if (!documentAnimation->m_defaultTimeline)
    51         documentAnimation->m_defaultTimeline = DocumentTimeline::create(0.0);
    52     return documentAnimation->m_defaultTimeline.get();
    53 }
     74    if (m_effect)
     75        m_effect->setAnimation(nullptr);
    5476
    55 const char* DocumentAnimation::supplementName()
    56 {
    57     return "DocumentAnimation";
    58 }
    59 
    60 DocumentAnimation* DocumentAnimation::from(Document* document)
    61 {
    62     DocumentAnimation* supplement = static_cast<DocumentAnimation*>(Supplement<Document>::from(document, supplementName()));
    63     if (!supplement) {
    64         auto newSupplement = std::make_unique<DocumentAnimation>();
    65         supplement = newSupplement.get();
    66         provideTo(document, supplementName(), WTFMove(newSupplement));
    67     }
    68     return supplement;
     77    if (m_timeline)
     78        m_timeline->detachAnimation(*this);
    6979}
    7080
  • trunk/Source/WebCore/animation/WebAnimation.h

    r201809 r201810  
    2727 */
    2828
    29 #ifndef DocumentAnimation_h
    30 #define DocumentAnimation_h
     29#pragma once
    3130
    3231#if ENABLE(WEB_ANIMATIONS)
    3332
    34 #include "Supplementable.h"
     33#include <wtf/RefCounted.h>
     34#include <wtf/RefPtr.h>
     35#include <wtf/Vector.h>
     36#include <wtf/WeakPtr.h>
    3537
    3638namespace WebCore {
    3739
    38 class DocumentTimeline;
    39 class Document;
     40class AnimationEffect;
     41class AnimationTimeline;
    4042
    41 class DocumentAnimation : public Supplement<Document> {
     43class WebAnimation final : public RefCounted<WebAnimation> {
    4244public:
    43     DocumentAnimation();
    44     virtual ~DocumentAnimation();
     45    static RefPtr<WebAnimation> create(AnimationEffect*, AnimationTimeline*);
     46    ~WebAnimation();
    4547
    46     static DocumentAnimation* from(Document*);
    47     static DocumentTimeline* timeline(Document&);
     48    AnimationEffect* effect() const { return m_effect.get(); }
     49    AnimationTimeline* timeline() const { return m_timeline.get(); }
     50
     51    WeakPtr<WebAnimation> createWeakPtr() const { return m_weakPtrFactory.createWeakPtr(); }
    4852
    4953private:
    50     static const char* supplementName();
     54    WebAnimation(AnimationEffect*, AnimationTimeline*);
    5155
    52     RefPtr<DocumentTimeline> m_defaultTimeline;
     56    RefPtr<AnimationEffect> m_effect;
     57    RefPtr<AnimationTimeline> m_timeline;
     58    WeakPtrFactory<WebAnimation> m_weakPtrFactory;
    5359};
     60
     61typedef Vector<WebAnimation *> WebAnimationVector;
    5462
    5563} // namespace WebCore
    5664
    5765#endif // ENABLE(WEB_ANIMATIONS)
    58 
    59 #endif // DocumentAnimation_h
  • trunk/Source/WebCore/animation/WebAnimation.idl

    r201809 r201810  
    2828
    2929[
    30     EnabledAtRuntime=WebAnimations,
    3130    Conditional=WEB_ANIMATIONS,
     31    InterfaceName=Animation,
    3232    ImplementationLacksVTable,
    33     // FIX: Should be DOMHighResTimeStamp rather than double (e.g. see Performance.now()).
    34     Constructor(double originTime)
    35 ] interface DocumentTimeline : AnimationTimeline {
     33    Constructor([Default=Undefined] AnimationEffect? effect, [Default=Undefined] AnimationTimeline? timeline)
     34] interface WebAnimation { // FIXME: Inherit from EventTarget.
     35    // FIXME: Incomplete interface.
     36    readonly attribute AnimationEffect? effect;
     37    readonly attribute AnimationTimeline? timeline;
    3638};
  • trunk/Source/WebCore/bindings/scripts/CodeGeneratorGObject.pm

    r200365 r201810  
    4848                    "Counter" => 1, "Rect" => 1, "RGBColor" => 1, "XPathExpression" => 1, "XPathResult" => 1,
    4949                    "NodeIterator" => 1, "TreeWalker" => 1, "AbstractView" => 1, "Blob" => 1, "DOMTokenList" => 1,
    50                     "HTMLCollection" => 1, "TextTrackCue" => 1, "AnimationTimeline" => 1);
     50                    "HTMLCollection" => 1, "TextTrackCue" => 1, "AnimationTimeline" => 1, "AnimationEffect" => 1);
    5151
    5252# Only objects derived from Node are released by the DOM object cache and can be
     
    6464    "File" => 1, "FileList" => 1, "Gamepad" => 1, "GamepadList" => 1,
    6565    "Geolocation" => 1, "HTMLOptionsCollection" => 1, "History" => 1,
    66     "KeyboardEvent" => 1, "MediaError" => 1, "MediaController" => 1,
     66    "KeyboardEvent" => 1, "KeyframeEffect" => 1, "MediaError" => 1, "MediaController" => 1,
    6767    "MouseEvent" => 1, "MediaQueryList" => 1, "Navigator" => 1, "NodeFilter" => 1,
    6868    "Performance" => 1, "PerformanceEntry" => 1, "PerformanceEntryList" => 1, "PerformanceNavigation" => 1, "PerformanceTiming" => 1,
  • trunk/Source/WebCore/dom/Element.cpp

    r201739 r201810  
    4141#include "DOMTokenList.h"
    4242#include "Dictionary.h"
     43#include "DocumentAnimation.h"
    4344#include "DocumentSharedObjectPool.h"
    4445#include "ElementIterator.h"
     
    6768#include "JSLazyEventListener.h"
    6869#include "KeyboardEvent.h"
     70#include "KeyframeEffect.h"
    6971#include "LifecycleCallbackQueue.h"
    7072#include "MainFrame.h"
     
    13831385}
    13841386
     1387#if ENABLE(WEB_ANIMATIONS)
     1388WebAnimationVector Element::getAnimations()
     1389{
     1390    auto checkTarget = [this](AnimationEffect const& effect)
     1391    {
     1392        return (static_cast<KeyframeEffect const&>(effect).target() == this);
     1393    };
     1394
     1395    auto* document = DocumentAnimation::from(&this->document());
     1396    if (document)
     1397        return document->getAnimations(checkTarget);
     1398    return WebAnimationVector();
     1399}
     1400#endif
     1401
    13851402bool Element::hasDisplayContents() const
    13861403{
  • trunk/Source/WebCore/dom/Element.h

    r201739 r201810  
    5353class RenderNamedFlowFragment;
    5454class RenderTreePosition;
     55class WebAnimation;
    5556struct ElementStyle;
    5657
     
    517518    void setAttributeEventListener(const AtomicString& eventType, const QualifiedName& attributeName, const AtomicString& value);
    518519
     520#if ENABLE(WEB_ANIMATIONS)
     521    Vector<WebAnimation*> getAnimations();
     522#endif
     523
    519524protected:
    520525    Element(const QualifiedName&, Document&, ConstructionType);
  • trunk/Source/WebCore/dom/Element.idl

    r200934 r201810  
    241241};
    242242
     243Element implements Animatable;
    243244Element implements ChildNode;
    244245Element implements ParentNode;
  • trunk/Source/WebKit/mac/ChangeLog

    r201763 r201810  
     12016-06-08  Rawinder Singh  <rawinder.singh-webkit@cisra.canon.com.au>
     2
     3        [web-animations] Add Animatable, AnimationEffect, KeyframeEffect and Animation interface
     4        https://bugs.webkit.org/show_bug.cgi?id=156096
     5
     6        Reviewed by Dean Jackson.
     7
     8        Adds:
     9        - Setup interface for enabling runtime flag for Web animations through preferences.
     10
     11        * WebView/WebPreferenceKeysPrivate.h:
     12        * WebView/WebPreferences.mm:
     13        (+[WebPreferences initialize]):
     14        (-[WebPreferences webAnimationsEnabled]):
     15        (-[WebPreferences setWebAnimationsEnabled:]):
     16        * WebView/WebPreferencesPrivate.h:
     17        * WebView/WebView.mm:
     18        (-[WebView _preferencesChanged:]):
     19
    1202016-06-07  David Kilzer  <ddkilzer@apple.com>
    221
  • trunk/Source/WebKit/mac/WebView/WebPreferenceKeysPrivate.h

    r201187 r201810  
    5353#define WebKitJavaScriptEnabledPreferenceKey @"WebKitJavaScriptEnabled"
    5454#define WebKitJavaScriptMarkupEnabledPreferenceKey @"WebKitJavaScriptMarkupEnabled"
     55#define WebKitWebAnimationsEnabledPreferenceKey @"WebKitWebAnimationsEnabled"
    5556#define WebKitWebSecurityEnabledPreferenceKey @"WebKitWebSecurityEnabled"
    5657#define WebKitAllowUniversalAccessFromFileURLsPreferenceKey @"WebKitAllowUniversalAccessFromFileURLs"
  • trunk/Source/WebKit/mac/WebView/WebPreferences.mm

    r201187 r201810  
    625625        [NSNumber numberWithBool:YES], WebKitCSSGridLayoutEnabledPreferenceKey,
    626626#endif
     627#if ENABLE(WEB_ANIMATIONS)
     628        [NSNumber numberWithBool:NO], WebKitWebAnimationsEnabledPreferenceKey,
     629#endif
    627630        nil];
    628631
     
    27552758}
    27562759
     2760- (BOOL)webAnimationsEnabled
     2761{
     2762    return [self _boolValueForKey:WebKitWebAnimationsEnabledPreferenceKey];
     2763}
     2764
     2765- (void)setWebAnimationsEnabled:(BOOL)flag
     2766{
     2767    [self _setBoolValue:flag forKey:WebKitWebAnimationsEnabledPreferenceKey];
     2768}
     2769
    27572770@end
    27582771
  • trunk/Source/WebKit/mac/WebView/WebPreferencesPrivate.h

    r201542 r201810  
    491491- (BOOL)isCSSGridLayoutEnabled;
    492492
     493- (void)setWebAnimationsEnabled:(BOOL)flag;
     494- (BOOL)webAnimationsEnabled;
     495
    493496@property (nonatomic) BOOL javaScriptMarkupEnabled;
    494497@property (nonatomic) BOOL mediaDataLoadsAutomatically;
  • trunk/Source/WebKit/mac/WebView/WebView.mm

    r201360 r201810  
    25132513#endif
    25142514
     2515#if ENABLE(WEB_ANIMATIONS)
     2516    RuntimeEnabledFeatures::sharedFeatures().setWebAnimationsEnabled([preferences webAnimationsEnabled]);
     2517#endif
     2518
    25152519    NSTimeInterval timeout = [preferences incrementalRenderingSuppressionTimeoutInSeconds];
    25162520    if (timeout > 0)
Note: See TracChangeset for help on using the changeset viewer.