Changeset 73927 in webkit


Ignore:
Timestamp:
Dec 13, 2010 10:21:38 AM (13 years ago)
Author:
jschuh@chromium.org
Message:

2010-12-13 Justin Schuh <jschuh@chromium.org>

Reviewed by Dimitri Glazkov.

HTMLCanvasElement should handle multiple observers.
https://bugs.webkit.org/show_bug.cgi?id=50899

Test: fast/canvas/canvas-bg-multiple-removal.html

  • css/CSSCanvasValue.cpp: (WebCore::CSSCanvasValue::~CSSCanvasValue): (WebCore::CSSCanvasValue::canvasDestroyed): (WebCore::CSSCanvasValue::element):
  • html/HTMLCanvasElement.cpp: (WebCore::HTMLCanvasElement::HTMLCanvasElement): (WebCore::HTMLCanvasElement::~HTMLCanvasElement): (WebCore::HTMLCanvasElement::addObserver): (WebCore::HTMLCanvasElement::removeObserver): (WebCore::HTMLCanvasElement::didDraw): (WebCore::HTMLCanvasElement::reset):
  • html/HTMLCanvasElement.h:

2010-12-13 Justin Schuh <jschuh@chromium.org>

Reviewed by Dimitri Glazkov.

HTMLCanvasElement should handle multiple observers.
https://bugs.webkit.org/show_bug.cgi?id=50899

  • fast/canvas/canvas-bg-multiple-removal-expected.txt: Added.
  • fast/canvas/canvas-bg-multiple-removal.html: Added.
Location:
trunk
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r73926 r73927  
     12010-12-13  Justin Schuh  <jschuh@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        HTMLCanvasElement should handle multiple observers.
     6        https://bugs.webkit.org/show_bug.cgi?id=50899
     7
     8        * fast/canvas/canvas-bg-multiple-removal-expected.txt: Added.
     9        * fast/canvas/canvas-bg-multiple-removal.html: Added.
     10
    1112010-12-13  Mihai Parparita  <mihaip@chromium.org>
    212
  • trunk/WebCore/ChangeLog

    r73926 r73927  
     12010-12-13  Justin Schuh  <jschuh@chromium.org>
     2
     3        Reviewed by Dimitri Glazkov.
     4
     5        HTMLCanvasElement should handle multiple observers.
     6        https://bugs.webkit.org/show_bug.cgi?id=50899
     7
     8        Test: fast/canvas/canvas-bg-multiple-removal.html
     9
     10        * css/CSSCanvasValue.cpp:
     11        (WebCore::CSSCanvasValue::~CSSCanvasValue):
     12        (WebCore::CSSCanvasValue::canvasDestroyed):
     13        (WebCore::CSSCanvasValue::element):
     14        * html/HTMLCanvasElement.cpp:
     15        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
     16        (WebCore::HTMLCanvasElement::~HTMLCanvasElement):
     17        (WebCore::HTMLCanvasElement::addObserver):
     18        (WebCore::HTMLCanvasElement::removeObserver):
     19        (WebCore::HTMLCanvasElement::didDraw):
     20        (WebCore::HTMLCanvasElement::reset):
     21        * html/HTMLCanvasElement.h:
     22
    1232010-12-13  Mihai Parparita  <mihaip@chromium.org>
    224
  • trunk/WebCore/css/CSSCanvasValue.cpp

    r65449 r73927  
    3535{
    3636    if (m_element)
    37         m_element->setObserver(0);
     37        m_element->removeObserver(this);
    3838}
    3939
     
    6363{
    6464    ASSERT(element == m_element);
    65     if (element == m_element)
    66         m_element = 0;
     65    m_element = 0;
    6766}
    6867
     
    8079        if (!m_element)
    8180            return 0;
    82         m_element->setObserver(this);
     81        m_element->addObserver(this);
    8382    }
    8483    return m_element;
  • trunk/WebCore/html/HTMLCanvasElement.cpp

    r73925 r73927  
    7272HTMLCanvasElement::HTMLCanvasElement(const QualifiedName& tagName, Document* document)
    7373    : HTMLElement(tagName, document)
    74     , m_observer(0)
    7574    , m_size(DefaultWidth, DefaultHeight)
    7675    , m_ignoreReset(false)
     
    9493HTMLCanvasElement::~HTMLCanvasElement()
    9594{
    96     if (m_observer)
    97         m_observer->canvasDestroyed(this);
     95    HashSet<CanvasObserver*>::iterator end = m_observers.end();
     96    for (HashSet<CanvasObserver*>::iterator it = m_observers.begin(); it != end; ++it)
     97        (*it)->canvasDestroyed(this);
    9898}
    9999
     
    116116    m_rendererIsCanvas = false;
    117117    return HTMLElement::createRenderer(arena, style);
     118}
     119
     120void HTMLCanvasElement::addObserver(CanvasObserver* observer)
     121{
     122    m_observers.add(observer);
     123}
     124
     125void HTMLCanvasElement::removeObserver(CanvasObserver* observer)
     126{
     127    m_observers.remove(observer);
    118128}
    119129
     
    201211    }
    202212
    203     if (m_observer)
    204         m_observer->canvasChanged(this, rect);
     213    HashSet<CanvasObserver*>::iterator end = m_observers.end();
     214    for (HashSet<CanvasObserver*>::iterator it = m_observers.begin(); it != end; ++it)
     215        (*it)->canvasChanged(this, rect);
    205216}
    206217
     
    239250    }
    240251
    241     if (m_observer)
    242         m_observer->canvasResized(this);
     252    HashSet<CanvasObserver*>::iterator end = m_observers.end();
     253    for (HashSet<CanvasObserver*>::iterator it = m_observers.begin(); it != end; ++it)
     254        (*it)->canvasResized(this);
    243255}
    244256
  • trunk/WebCore/html/HTMLCanvasElement.h

    r73744 r73927  
    6666    virtual ~HTMLCanvasElement();
    6767
    68     void setObserver(CanvasObserver* observer) { m_observer = observer; }
     68    void addObserver(CanvasObserver* observer);
     69    void removeObserver(CanvasObserver* observer);
    6970
    7071    // Attributes and functions exposed to script
     
    139140    bool hasCreatedImageBuffer() const { return m_hasCreatedImageBuffer; }
    140141
    141     CanvasObserver* m_observer;
     142    HashSet<CanvasObserver*> m_observers;
    142143
    143144    IntSize m_size;
Note: See TracChangeset for help on using the changeset viewer.