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 11namespace blink { 12 13#if ENABLE(ASSERT) 14 15class EventDispatchForbiddenScope { 16public: 17 EventDispatchForbiddenScope() 18 { 19 if (!isMainThread()) 20 return; 21 ++s_count; 22 } 23 24 ~EventDispatchForbiddenScope() 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 class AllowUserAgentEvents { 40 public: 41 AllowUserAgentEvents() 42 : m_change(s_count, 0) 43 { 44 } 45 46 ~AllowUserAgentEvents() 47 { 48 ASSERT(!s_count); 49 } 50 51 TemporaryChange<unsigned> m_change; 52 }; 53 54private: 55 static unsigned s_count; 56}; 57 58#else 59 60class EventDispatchForbiddenScope { 61public: 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