blob: 3f2941d4295062ccfef11cce5a95f54fc1a29f5a [file] [log] [blame]
Torne (Richard Coles)5c87bf82012-11-14 11:46:17 +00001/*
2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met:
7 *
8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the
13 * distribution.
14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */
30
31#ifndef MutationObserver_h
32#define MutationObserver_h
33
Torne (Richard Coles)93ac45c2013-05-29 14:40:20 +010034#include "bindings/v8/ScriptWrappable.h"
Torne (Richard Coles)93ac45c2013-05-29 14:40:20 +010035#include "wtf/HashSet.h"
36#include "wtf/PassRefPtr.h"
37#include "wtf/RefCounted.h"
38#include "wtf/RefPtr.h"
Ben Murdoch0019e4e2013-07-18 11:57:54 +010039#include "wtf/Vector.h"
Torne (Richard Coles)5c87bf82012-11-14 11:46:17 +000040
41namespace WebCore {
42
43class Dictionary;
Ben Murdochdf957042013-08-06 11:01:27 +010044class ExceptionState;
Torne (Richard Coles)5c87bf82012-11-14 11:46:17 +000045class MutationCallback;
46class MutationObserverRegistration;
47class MutationRecord;
48class Node;
49
Torne (Richard Coles)5c87bf82012-11-14 11:46:17 +000050typedef unsigned char MutationObserverOptions;
51typedef unsigned char MutationRecordDeliveryOptions;
52
Torne (Richard Coles)93ac45c2013-05-29 14:40:20 +010053class MutationObserver : public RefCounted<MutationObserver>, public ScriptWrappable {
Torne (Richard Coles)5c87bf82012-11-14 11:46:17 +000054public:
55 enum MutationType {
56 ChildList = 1 << 0,
57 Attributes = 1 << 1,
58 CharacterData = 1 << 2,
59
60 AllMutationTypes = ChildList | Attributes | CharacterData
61 };
62
63 enum ObservationFlags {
64 Subtree = 1 << 3,
65 AttributeFilter = 1 << 4
66 };
67
68 enum DeliveryFlags {
69 AttributeOldValue = 1 << 5,
70 CharacterDataOldValue = 1 << 6,
71 };
72
73 static PassRefPtr<MutationObserver> create(PassRefPtr<MutationCallback>);
74 static void deliverAllMutations();
75
76 ~MutationObserver();
77
Ben Murdochdf957042013-08-06 11:01:27 +010078 void observe(Node*, const Dictionary&, ExceptionState&);
Torne (Richard Coles)5c87bf82012-11-14 11:46:17 +000079 Vector<RefPtr<MutationRecord> > takeRecords();
80 void disconnect();
81 void observationStarted(MutationObserverRegistration*);
82 void observationEnded(MutationObserverRegistration*);
83 void enqueueMutationRecord(PassRefPtr<MutationRecord>);
84 void setHasTransientRegistration();
Torne (Richard Coles)926b0012013-03-28 15:32:48 +000085 bool canDeliver();
86
87 HashSet<Node*> getObservedNodes() const;
Torne (Richard Coles)5c87bf82012-11-14 11:46:17 +000088
89private:
90 struct ObserverLessThan;
91
92 explicit MutationObserver(PassRefPtr<MutationCallback>);
93 void deliver();
94
95 static bool validateOptions(MutationObserverOptions);
96
97 RefPtr<MutationCallback> m_callback;
98 Vector<RefPtr<MutationRecord> > m_records;
99 HashSet<MutationObserverRegistration*> m_registrations;
100 unsigned m_priority;
101};
102
103}
104
Torne (Richard Coles)5c87bf82012-11-14 11:46:17 +0000105#endif // MutationObserver_h