chromium-browser (6.0.472.63~r59945-5+squeeze6) 66560.patch

Summary

 src/third_party/WebKit/WebCore/css/CSSCanvasValue.cpp     |    6 +--
 src/third_party/WebKit/WebCore/html/HTMLCanvasElement.cpp |   26 ++++++++++----
 src/third_party/WebKit/WebCore/html/HTMLCanvasElement.h   |    5 +-
 3 files changed, 25 insertions(+), 12 deletions(-)

    
download this patch

Patch contents

--- 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;