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.


git-svn-id: http://svn.webkit.org/repository/webkit/trunk@73927 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/css/CSSCanvasValue.cpp b/WebCore/css/CSSCanvasValue.cpp
index 767c11e..e9e83c5 100644
--- a/WebCore/css/CSSCanvasValue.cpp
+++ b/WebCore/css/CSSCanvasValue.cpp
@@ -34,7 +34,7 @@
 CSSCanvasValue::~CSSCanvasValue()
 {
     if (m_element)
-        m_element->setObserver(0);
+        m_element->removeObserver(this);
 }
 
 String CSSCanvasValue::cssText() const
@@ -62,8 +62,7 @@
 void CSSCanvasValue::canvasDestroyed(HTMLCanvasElement* element)
 {
     ASSERT(element == m_element);
-    if (element == m_element)
-        m_element = 0;
+    m_element = 0;
 }
 
 IntSize CSSCanvasValue::fixedSize(const RenderObject* renderer)
@@ -79,7 +78,7 @@
         m_element = document->getCSSCanvasElement(m_name);
         if (!m_element)
             return 0;
-        m_element->setObserver(this);
+        m_element->addObserver(this);
     }
     return m_element;
 }