--- a/src/third_party/WebKit/WebCore/css/CSSCanvasValue.cpp
+++ b/src/third_party/WebKit/WebCore/css/CSSCanvasValue.cpp
@@ -34,7 +34,7 @@ namespace WebCore {
CSSCanvasValue::~CSSCanvasValue()
{
if (m_element)
- m_element->setObserver(0);
+ m_element->removeObserver(this);
}
String CSSCanvasValue::cssText() const
@@ -63,7 +63,7 @@ void CSSCanvasValue::canvasDestroyed(HTM
{
ASSERT(element == m_element);
if (element == m_element)
- m_element = 0;
+ m_element = 0;
}
IntSize CSSCanvasValue::fixedSize(const RenderObject* renderer)
@@ -79,7 +79,7 @@ HTMLCanvasElement* CSSCanvasValue::eleme
m_element = document->getCSSCanvasElement(m_name);
if (!m_element)
return 0;
- m_element->setObserver(this);
+ m_element->addObserver(this);
}
return m_element;
}
--- a/src/third_party/WebKit/WebCore/html/HTMLCanvasElement.cpp
+++ b/src/third_party/WebKit/WebCore/html/HTMLCanvasElement.cpp
@@ -71,7 +71,6 @@ static const float MaxSkiaDim = 32767.0F
HTMLCanvasElement::HTMLCanvasElement(const QualifiedName& tagName, Document* document)
: HTMLElement(tagName, document)
- , m_observer(0)
, m_size(DefaultWidth, DefaultHeight)
, m_ignoreReset(false)
, m_pageScaleFactor(document->frame() ? document->frame()->page()->chrome()->scaleFactor() : 1)
@@ -93,8 +92,9 @@ PassRefPtr<HTMLCanvasElement> HTMLCanvas
HTMLCanvasElement::~HTMLCanvasElement()
{
- if (m_observer)
- m_observer->canvasDestroyed(this);
+ HashSet<CanvasObserver*>::iterator end = m_observers.end();
+ for (HashSet<CanvasObserver*>::iterator it = m_observers.begin(); it != end; ++it)
+ (*it)->canvasDestroyed(this);
}
#if ENABLE(DASHBOARD_SUPPORT)
@@ -139,6 +139,16 @@ RenderObject* HTMLCanvasElement::createR
return HTMLElement::createRenderer(arena, style);
}
+void HTMLCanvasElement::addObserver(CanvasObserver* observer)
+{
+ m_observers.add(observer);
+}
+
+void HTMLCanvasElement::removeObserver(CanvasObserver* observer)
+{
+ m_observers.remove(observer);
+}
+
void HTMLCanvasElement::setHeight(int value)
{
setAttribute(heightAttr, String::number(value));
@@ -217,8 +227,9 @@ void HTMLCanvasElement::willDraw(const F
ro->repaintRectangle(enclosingIntRect(m_dirtyRect));
}
- if (m_observer)
- m_observer->canvasChanged(this, rect);
+ HashSet<CanvasObserver*>::iterator end = m_observers.end();
+ for (HashSet<CanvasObserver*>::iterator it = m_observers.begin(); it != end; ++it)
+ (*it)->canvasChanged(this, rect);
}
void HTMLCanvasElement::reset()
@@ -255,8 +266,9 @@ void HTMLCanvasElement::reset()
}
}
- if (m_observer)
- m_observer->canvasResized(this);
+ HashSet<CanvasObserver*>::iterator end = m_observers.end();
+ for (HashSet<CanvasObserver*>::iterator it = m_observers.begin(); it != end; ++it)
+ (*it)->canvasResized(this);
}
void HTMLCanvasElement::paint(GraphicsContext* context, const IntRect& r)
--- a/src/third_party/WebKit/WebCore/html/HTMLCanvasElement.h
+++ b/src/third_party/WebKit/WebCore/html/HTMLCanvasElement.h
@@ -56,7 +56,8 @@ public:
static PassRefPtr<HTMLCanvasElement> create(const QualifiedName&, Document*);
virtual ~HTMLCanvasElement();
- void setObserver(CanvasObserver* observer) { m_observer = observer; }
+ void addObserver(CanvasObserver* observer);
+ void removeObserver(CanvasObserver* observer);
// Attributes and functions exposed to script
int width() const { return size().width(); }
@@ -132,7 +133,7 @@ private:
void setSurfaceSize(const IntSize&);
bool hasCreatedImageBuffer() const { return m_hasCreatedImageBuffer; }
- CanvasObserver* m_observer;
+ HashSet<CanvasObserver*> m_observers;
IntSize m_size;