1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef MediaQueryListEvent_h
6#define MediaQueryListEvent_h
7
8#include "core/css/MediaQueryList.h"
9#include "core/events/Event.h"
10
11namespace blink {
12
13struct MediaQueryListEventInit : public EventInit {
14    MediaQueryListEventInit() : matches(false) { }
15
16    String media;
17    bool matches;
18};
19
20class MediaQueryListEvent FINAL : public Event {
21    DEFINE_WRAPPERTYPEINFO();
22public:
23    static PassRefPtrWillBeRawPtr<MediaQueryListEvent> create()
24    {
25        return adoptRefWillBeNoop(new MediaQueryListEvent);
26    }
27
28    static PassRefPtrWillBeRawPtr<MediaQueryListEvent> create(PassRefPtrWillBeRawPtr<MediaQueryList> list)
29    {
30        return adoptRefWillBeNoop(new MediaQueryListEvent(list));
31    }
32
33    static PassRefPtrWillBeRawPtr<MediaQueryListEvent> create(const String& media, bool matches)
34    {
35        return adoptRefWillBeNoop(new MediaQueryListEvent(media, matches));
36    }
37
38    static PassRefPtrWillBeRawPtr<MediaQueryListEvent> create(const AtomicString& eventType, const MediaQueryListEventInit& initializer)
39    {
40        return adoptRefWillBeNoop(new MediaQueryListEvent(eventType, initializer));
41    }
42
43    String media() const { return m_mediaQueryList ? m_mediaQueryList->media() : m_media; }
44    bool matches() const { return m_mediaQueryList ? m_mediaQueryList->matches() : m_matches; }
45
46    virtual const AtomicString& interfaceName() const OVERRIDE { return EventNames::MediaQueryListEvent; }
47
48    virtual void trace(Visitor* visitor) OVERRIDE
49    {
50        Event::trace(visitor);
51        visitor->trace(m_mediaQueryList);
52    }
53
54private:
55    MediaQueryListEvent()
56        : m_matches(false) { }
57
58    MediaQueryListEvent(const String& media, bool matches)
59        : Event(EventTypeNames::change, false, false)
60        , m_media(media)
61        , m_matches(matches) { }
62
63    explicit MediaQueryListEvent(PassRefPtrWillBeRawPtr<MediaQueryList> list)
64        : Event(EventTypeNames::change, false, false)
65        , m_mediaQueryList(list)
66        , m_matches(false) { }
67
68    MediaQueryListEvent(const AtomicString& eventType, const MediaQueryListEventInit& initializer)
69        : Event(eventType, initializer)
70        , m_media(initializer.media)
71        , m_matches(initializer.matches) { }
72
73    // We have m_media/m_matches for JS-created events; we use m_mediaQueryList
74    // for events that blink generates.
75    RefPtrWillBeMember<MediaQueryList> m_mediaQueryList;
76    String m_media;
77    bool m_matches;
78};
79
80} // namespace blink
81
82#endif // MediaQueryListEvent_h
83