Home | History | Annotate | Download | only in js
      1 /*
      2     Copyright (C) Research In Motion Limited 2009-2010. All rights reserved.
      3 
      4     This library is free software; you can redistribute it and/or
      5     modify it under the terms of the GNU Library General Public
      6     License as published by the Free Software Foundation; either
      7     version 2 of the License, or (at your option) any later version.
      8 
      9     This library is distributed in the hope that it will be useful,
     10     but WITHOUT ANY WARRANTY; without even the implied warranty of
     11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     12     Library General Public License for more details.
     13 
     14     You should have received a copy of the GNU Library General Public License
     15     along with this library; see the file COPYING.LIB.  If not, write to
     16     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
     17     Boston, MA 02110-1301, USA.
     18 */
     19 
     20 #ifndef JSSVGContextCache_h
     21 #define JSSVGContextCache_h
     22 
     23 #if ENABLE(SVG)
     24 #include "SVGElement.h"
     25 #include <wtf/StdLibExtras.h>
     26 
     27 namespace WebCore {
     28 
     29 class DOMObject;
     30 
     31 class JSSVGContextCache : public Noncopyable {
     32 public:
     33     typedef HashMap<DOMObject*, SVGElement*> WrapperMap;
     34 
     35     static WrapperMap& wrapperMap()
     36     {
     37         DEFINE_STATIC_LOCAL(WrapperMap, s_wrapperMap, ());
     38         return s_wrapperMap;
     39     }
     40 
     41     static void addWrapper(DOMObject* wrapper, SVGElement* context)
     42     {
     43         ASSERT(wrapper);
     44         ASSERT(context);
     45 
     46         pair<WrapperMap::iterator, bool> result = wrapperMap().add(wrapper, context);
     47         if (result.second) {
     48             WrapperMap::iterator& it = result.first;
     49             ASSERT_UNUSED(it, it->second == context);
     50         }
     51     }
     52 
     53     static void forgetWrapper(DOMObject* wrapper)
     54     {
     55         ASSERT(wrapper);
     56 
     57         WrapperMap& map = wrapperMap();
     58         WrapperMap::iterator it = map.find(wrapper);
     59         if (it == map.end())
     60             return;
     61 
     62         map.remove(it);
     63     }
     64 
     65     static void propagateSVGDOMChange(DOMObject* wrapper, const QualifiedName& attributeName)
     66     {
     67         WrapperMap& map = wrapperMap();
     68         WrapperMap::iterator it = map.find(wrapper);
     69         if (it == map.end())
     70             return;
     71 
     72         SVGElement* context = it->second;
     73         ASSERT(context);
     74 
     75         context->svgAttributeChanged(attributeName);
     76     }
     77 
     78     static SVGElement* svgContextForDOMObject(DOMObject* wrapper)
     79     {
     80         ASSERT(wrapper);
     81 
     82         WrapperMap& map = wrapperMap();
     83         WrapperMap::iterator it = map.find(wrapper);
     84         if (it == map.end())
     85             return 0;
     86 
     87         SVGElement* context = it->second;
     88         ASSERT(context);
     89         return context;
     90     }
     91 
     92 };
     93 
     94 }
     95 
     96 #endif
     97 #endif
     98