Home | History | Annotate | Download | only in dom
      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
     77