Diff
Modified: trunk/Source/WebCore/ChangeLog (158971 => 158972)
--- trunk/Source/WebCore/ChangeLog 2013-11-09 00:25:24 UTC (rev 158971)
+++ trunk/Source/WebCore/ChangeLog 2013-11-09 00:27:50 UTC (rev 158972)
@@ -1,3 +1,15 @@
+2013-11-08 Sam Weinig <[email protected]>
+
+ Teach CanvasObserver about references
+ https://bugs.webkit.org/show_bug.cgi?id=124082
+
+ Reviewed by Anders Carlsson.
+
+ * css/CSSCanvasValue.cpp:
+ * css/CSSCanvasValue.h:
+ * html/HTMLCanvasElement.cpp:
+ * html/HTMLCanvasElement.h:
+
2013-11-08 Anders Carlsson <[email protected]>
Begin stubbing out a KeyedEncoder class in WebCore
Modified: trunk/Source/WebCore/css/CSSCanvasValue.cpp (158971 => 158972)
--- trunk/Source/WebCore/css/CSSCanvasValue.cpp 2013-11-09 00:25:24 UTC (rev 158971)
+++ trunk/Source/WebCore/css/CSSCanvasValue.cpp 2013-11-09 00:27:50 UTC (rev 158972)
@@ -35,7 +35,7 @@
CSSCanvasValue::~CSSCanvasValue()
{
if (m_element)
- m_element->removeObserver(&m_canvasObserver);
+ m_element->removeObserver(m_canvasObserver);
}
String CSSCanvasValue::customCSSText() const
@@ -47,22 +47,22 @@
return result.toString();
}
-void CSSCanvasValue::canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect)
+void CSSCanvasValue::canvasChanged(HTMLCanvasElement&, const FloatRect& changedRect)
{
IntRect imageChangeRect = enclosingIntRect(changedRect);
for (auto it = clients().begin(), end = clients().end(); it != end; ++it)
it->key->imageChanged(static_cast<WrappedImagePtr>(this), &imageChangeRect);
}
-void CSSCanvasValue::canvasResized(HTMLCanvasElement*)
+void CSSCanvasValue::canvasResized(HTMLCanvasElement&)
{
for (auto it = clients().begin(), end = clients().end(); it != end; ++it)
it->key->imageChanged(static_cast<WrappedImagePtr>(this));
}
-void CSSCanvasValue::canvasDestroyed(HTMLCanvasElement* element)
+void CSSCanvasValue::canvasDestroyed(HTMLCanvasElement& element)
{
- ASSERT_UNUSED(element, element == m_element);
+ ASSERT_UNUSED(&element, &element == m_element);
m_element = nullptr;
}
@@ -78,8 +78,8 @@
if (!m_element) {
m_element = document.getCSSCanvasElement(m_name);
if (!m_element)
- return 0;
- m_element->addObserver(&m_canvasObserver);
+ return nullptr;
+ m_element->addObserver(m_canvasObserver);
}
return m_element;
}
Modified: trunk/Source/WebCore/css/CSSCanvasValue.h (158971 => 158972)
--- trunk/Source/WebCore/css/CSSCanvasValue.h 2013-11-09 00:25:24 UTC (rev 158971)
+++ trunk/Source/WebCore/css/CSSCanvasValue.h 2013-11-09 00:27:50 UTC (rev 158972)
@@ -52,7 +52,7 @@
private:
explicit CSSCanvasValue(const String& name)
: CSSImageGeneratorValue(CanvasClass)
- , m_canvasObserver(this)
+ , m_canvasObserver(*this)
, m_name(name)
, m_element(0)
{
@@ -62,27 +62,33 @@
// to avoid adding a vptr to CSSCanvasValue.
class CanvasObserverProxy : public CanvasObserver {
public:
- CanvasObserverProxy(CSSCanvasValue* ownerValue) : m_ownerValue(ownerValue) { }
- virtual ~CanvasObserverProxy() { }
- virtual void canvasChanged(HTMLCanvasElement* canvas, const FloatRect& changedRect)
+ CanvasObserverProxy(CSSCanvasValue& ownerValue)
+ : m_ownerValue(ownerValue)
{
- m_ownerValue->canvasChanged(canvas, changedRect);
}
- virtual void canvasResized(HTMLCanvasElement* canvas)
+ virtual ~CanvasObserverProxy()
{
- m_ownerValue->canvasResized(canvas);
}
- virtual void canvasDestroyed(HTMLCanvasElement* canvas)
+ virtual void canvasChanged(HTMLCanvasElement& canvas, const FloatRect& changedRect)
{
- m_ownerValue->canvasDestroyed(canvas);
+ m_ownerValue.canvasChanged(canvas, changedRect);
}
+ virtual void canvasResized(HTMLCanvasElement& canvas)
+ {
+ m_ownerValue.canvasResized(canvas);
+ }
+ virtual void canvasDestroyed(HTMLCanvasElement& canvas)
+ {
+ m_ownerValue.canvasDestroyed(canvas);
+ }
+
private:
- CSSCanvasValue* m_ownerValue;
+ CSSCanvasValue& m_ownerValue;
};
- void canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect);
- void canvasResized(HTMLCanvasElement*);
- void canvasDestroyed(HTMLCanvasElement*);
+ void canvasChanged(HTMLCanvasElement&, const FloatRect& changedRect);
+ void canvasResized(HTMLCanvasElement&);
+ void canvasDestroyed(HTMLCanvasElement&);
HTMLCanvasElement* element(Document&);
Modified: trunk/Source/WebCore/html/HTMLCanvasElement.cpp (158971 => 158972)
--- trunk/Source/WebCore/html/HTMLCanvasElement.cpp 2013-11-09 00:25:24 UTC (rev 158971)
+++ trunk/Source/WebCore/html/HTMLCanvasElement.cpp 2013-11-09 00:27:50 UTC (rev 158972)
@@ -93,9 +93,8 @@
HTMLCanvasElement::~HTMLCanvasElement()
{
- HashSet<CanvasObserver*>::iterator end = m_observers.end();
- for (HashSet<CanvasObserver*>::iterator it = m_observers.begin(); it != end; ++it)
- (*it)->canvasDestroyed(this);
+ for (auto it = m_observers.begin(), end = m_observers.end(); it != end; ++it)
+ (*it)->canvasDestroyed(*this);
m_context.clear(); // Ensure this goes away before the ImageBuffer.
}
@@ -139,14 +138,14 @@
return false;
}
-void HTMLCanvasElement::addObserver(CanvasObserver* observer)
+void HTMLCanvasElement::addObserver(CanvasObserver& observer)
{
- m_observers.add(observer);
+ m_observers.add(&observer);
}
-void HTMLCanvasElement::removeObserver(CanvasObserver* observer)
+void HTMLCanvasElement::removeObserver(CanvasObserver& observer)
{
- m_observers.remove(observer);
+ m_observers.remove(&observer);
}
void HTMLCanvasElement::setHeight(int value)
@@ -285,9 +284,8 @@
void HTMLCanvasElement::notifyObserversCanvasChanged(const FloatRect& rect)
{
- HashSet<CanvasObserver*>::iterator end = m_observers.end();
- for (HashSet<CanvasObserver*>::iterator it = m_observers.begin(); it != end; ++it)
- (*it)->canvasChanged(this, rect);
+ for (auto it = m_observers.begin(), end = m_observers.end(); it != end; ++it)
+ (*it)->canvasChanged(*this, rect);
}
void HTMLCanvasElement::reset()
@@ -352,9 +350,8 @@
}
}
- HashSet<CanvasObserver*>::iterator end = m_observers.end();
- for (HashSet<CanvasObserver*>::iterator it = m_observers.begin(); it != end; ++it)
- (*it)->canvasResized(this);
+ for (auto it = m_observers.begin(), end = m_observers.end(); it != end; ++it)
+ (*it)->canvasResized(*this);
}
float HTMLCanvasElement::targetDeviceScaleFactor() const
Modified: trunk/Source/WebCore/html/HTMLCanvasElement.h (158971 => 158972)
--- trunk/Source/WebCore/html/HTMLCanvasElement.h 2013-11-09 00:25:24 UTC (rev 158971)
+++ trunk/Source/WebCore/html/HTMLCanvasElement.h 2013-11-09 00:27:50 UTC (rev 158972)
@@ -55,9 +55,9 @@
public:
virtual ~CanvasObserver() { }
- virtual void canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect) = 0;
- virtual void canvasResized(HTMLCanvasElement*) = 0;
- virtual void canvasDestroyed(HTMLCanvasElement*) = 0;
+ virtual void canvasChanged(HTMLCanvasElement&, const FloatRect& changedRect) = 0;
+ virtual void canvasResized(HTMLCanvasElement&) = 0;
+ virtual void canvasDestroyed(HTMLCanvasElement&) = 0;
};
class HTMLCanvasElement FINAL : public HTMLElement {
@@ -66,8 +66,8 @@
static PassRefPtr<HTMLCanvasElement> create(const QualifiedName&, Document&);
virtual ~HTMLCanvasElement();
- void addObserver(CanvasObserver*);
- void removeObserver(CanvasObserver*);
+ void addObserver(CanvasObserver&);
+ void removeObserver(CanvasObserver&);
// Attributes and functions exposed to script
int width() const { return size().width(); }