| Index: Source/core/html/canvas/HitRegion.h
 | 
| diff --git a/Source/core/html/canvas/HitRegion.h b/Source/core/html/canvas/HitRegion.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..c0d57be5a619042deaaee471462aac38870c3e9b
 | 
| --- /dev/null
 | 
| +++ b/Source/core/html/canvas/HitRegion.h
 | 
| @@ -0,0 +1,95 @@
 | 
| +// Copyright 2014 The Chromium Authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +#ifndef HitRegion_h
 | 
| +#define HitRegion_h
 | 
| +
 | 
| +#include "bindings/v8/Dictionary.h"
 | 
| +#include "core/dom/Element.h"
 | 
| +#include "platform/graphics/Path.h"
 | 
| +#include "platform/heap/Handle.h"
 | 
| +#include "wtf/Noncopyable.h"
 | 
| +#include "wtf/OwnPtr.h"
 | 
| +#include "wtf/PassOwnPtr.h"
 | 
| +#include "wtf/PassRefPtr.h"
 | 
| +#include "wtf/RefPtr.h"
 | 
| +
 | 
| +namespace WebCore {
 | 
| +
 | 
| +struct HitRegionOptions {
 | 
| +    STACK_ALLOCATED();
 | 
| +
 | 
| +public:
 | 
| +    String id;
 | 
| +    RefPtrWillBeMember<Element> control;
 | 
| +    Path path;
 | 
| +};
 | 
| +
 | 
| +class HitRegion FINAL : public RefCountedWillBeGarbageCollected<HitRegion> {
 | 
| +public:
 | 
| +    static PassRefPtrWillBeRawPtr<HitRegion> create(const HitRegionOptions& options)
 | 
| +    {
 | 
| +        return adoptRefWillBeNoop(new HitRegion(options));
 | 
| +    }
 | 
| +
 | 
| +    virtual ~HitRegion() { }
 | 
| +
 | 
| +    void removePixels(const Path&);
 | 
| +    void updateAccessibility(Element* canvas);
 | 
| +
 | 
| +    bool contains(const LayoutPoint&) const;
 | 
| +
 | 
| +    const String& id() const { return m_id; }
 | 
| +    const Path& path() const { return m_path; }
 | 
| +    Element* control() const { return m_control.get(); }
 | 
| +
 | 
| +    void trace(Visitor*);
 | 
| +
 | 
| +private:
 | 
| +    explicit HitRegion(const HitRegionOptions&);
 | 
| +
 | 
| +    String m_id;
 | 
| +    RefPtrWillBeMember<Element> m_control;
 | 
| +    Path m_path;
 | 
| +};
 | 
| +
 | 
| +class HitRegionManager FINAL : public NoBaseWillBeGarbageCollected<HitRegionManager> {
 | 
| +    WTF_MAKE_NONCOPYABLE(HitRegionManager);
 | 
| +
 | 
| +public:
 | 
| +    static PassOwnPtrWillBeRawPtr<HitRegionManager> create() { return adoptPtrWillBeNoop(new HitRegionManager()); }
 | 
| +    virtual ~HitRegionManager() { }
 | 
| +
 | 
| +    void addHitRegion(PassRefPtrWillBeRawPtr<HitRegion>);
 | 
| +
 | 
| +    void removeHitRegion(HitRegion*);
 | 
| +    void removeHitRegionById(const String& id);
 | 
| +    void removeHitRegionByControl(Element*);
 | 
| +    void removeHitRegionsInRect(const FloatRect&, const AffineTransform&);
 | 
| +    void removeAllHitRegions();
 | 
| +
 | 
| +    HitRegion* getHitRegionById(const String& id) const;
 | 
| +    HitRegion* getHitRegionByControl(Element*) const;
 | 
| +    HitRegion* getHitRegionAtPoint(const LayoutPoint&) const;
 | 
| +
 | 
| +    unsigned getHitRegionsCount() const;
 | 
| +
 | 
| +    void trace(Visitor*);
 | 
| +
 | 
| +private:
 | 
| +    HitRegionManager() { }
 | 
| +
 | 
| +    typedef WillBeHeapListHashSet<RefPtrWillBeMember<HitRegion> > HitRegionList;
 | 
| +    typedef HitRegionList::const_reverse_iterator HitRegionIterator;
 | 
| +    typedef WillBeHeapHashMap<String, RefPtrWillBeMember<HitRegion> > HitRegionIdMap;
 | 
| +    typedef WillBeHeapHashMap<RefPtrWillBeMember<Element>, RefPtrWillBeMember<HitRegion> > HitRegionControlMap;
 | 
| +
 | 
| +    HitRegionList m_hitRegionList;
 | 
| +    HitRegionIdMap m_hitRegionIdMap;
 | 
| +    HitRegionControlMap m_hitRegionControlMap;
 | 
| +};
 | 
| +
 | 
| +} // namespace WebCore
 | 
| +
 | 
| +#endif
 | 
| 
 |