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 EventDispatchForbiddenScope_h 6 #define EventDispatchForbiddenScope_h 7 8 #include "wtf/MainThread.h" 9 #include "wtf/TemporaryChange.h" 10 11 namespace blink { 12 13 #if ENABLE(ASSERT) 14 15 class EventDispatchForbiddenScope { 16 public: EventDispatchForbiddenScope()17 EventDispatchForbiddenScope() 18 { 19 if (!isMainThread()) 20 return; 21 ++s_count; 22 } 23 ~EventDispatchForbiddenScope()24 ~EventDispatchForbiddenScope() 25 { 26 if (!isMainThread()) 27 return; 28 ASSERT(s_count); 29 --s_count; 30 } 31 isEventDispatchForbidden()32 static bool isEventDispatchForbidden() 33 { 34 if (!isMainThread()) 35 return false; 36 return s_count; 37 } 38 39 class AllowUserAgentEvents { 40 public: AllowUserAgentEvents()41 AllowUserAgentEvents() 42 : m_change(s_count, 0) 43 { 44 } 45 ~AllowUserAgentEvents()46 ~AllowUserAgentEvents() 47 { 48 ASSERT(!s_count); 49 } 50 51 TemporaryChange<unsigned> m_change; 52 }; 53 54 private: 55 static unsigned s_count; 56 }; 57 58 #else 59 60 class EventDispatchForbiddenScope { 61 public: 62 EventDispatchForbiddenScope() { } 63 64 class AllowUserAgentEvents { 65 public: 66 AllowUserAgentEvents() { } 67 }; 68 }; 69 70 #endif // ENABLE(ASSERT) 71 72 } // namespace blink 73 74 #endif // EventDispatchForbiddenScope_h 75