Upstream version 9.37.197.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / dom / NoEventDispatchAssertion.h
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 NoEventDispatchAssertion_h
6 #define NoEventDispatchAssertion_h
7
8 #include "wtf/MainThread.h"
9 #include "wtf/TemporaryChange.h"
10
11 namespace WebCore {
12
13 #ifndef NDEBUG
14
15 class NoEventDispatchAssertion {
16 public:
17     NoEventDispatchAssertion()
18     {
19         if (!isMainThread())
20             return;
21         ++s_count;
22     }
23
24     ~NoEventDispatchAssertion()
25     {
26         if (!isMainThread())
27             return;
28         ASSERT(s_count);
29         --s_count;
30     }
31
32     static bool isEventDispatchForbidden()
33     {
34         if (!isMainThread())
35             return false;
36         return s_count;
37     }
38
39     // It's safe to dispatch events in SVGImage since there can't be any script
40     // listeners.
41     class AllowSVGImageEvents {
42     public:
43         AllowSVGImageEvents()
44             : m_change(s_count, 0)
45         {
46         }
47
48         ~AllowSVGImageEvents()
49         {
50             ASSERT(!s_count);
51         }
52
53         TemporaryChange<unsigned> m_change;
54     };
55
56 private:
57     static unsigned s_count;
58 };
59
60 #else
61
62 class NoEventDispatchAssertion {
63 public:
64     NoEventDispatchAssertion() { }
65
66     class AllowSVGImageEvents {
67     public:
68         AllowSVGImageEvents() { }
69     };
70 };
71
72 #endif // NDEBUG
73
74 } // namespace WebCore
75
76 #endif // NoEventDispatchAssertion_h