Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / css / CSSCanvasValue.h
1 /*
2  * Copyright (C) 2008 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef CSSCanvasValue_h
27 #define CSSCanvasValue_h
28
29 #include "core/css/CSSImageGeneratorValue.h"
30 #include "core/html/HTMLCanvasElement.h"
31
32 namespace blink {
33
34 class Document;
35
36 class CSSCanvasValue : public CSSImageGeneratorValue {
37 public:
38     static PassRefPtrWillBeRawPtr<CSSCanvasValue> create(const String& name)
39     {
40         return adoptRefWillBeNoop(new CSSCanvasValue(name));
41     }
42     ~CSSCanvasValue();
43
44     String customCSSText() const;
45
46     PassRefPtr<Image> image(RenderObject*, const IntSize&);
47     bool isFixedSize() const { return true; }
48     IntSize fixedSize(const RenderObject*);
49
50     bool isPending() const { return false; }
51     void loadSubimages(ResourceFetcher*) { }
52
53     bool equals(const CSSCanvasValue&) const;
54
55     void traceAfterDispatch(Visitor*);
56
57 private:
58     explicit CSSCanvasValue(const String& name)
59         : CSSImageGeneratorValue(CanvasClass)
60         , m_canvasObserver(adoptPtrWillBeNoop(new CanvasObserverProxy(this)))
61         , m_name(name)
62         , m_element(nullptr)
63     {
64     }
65
66     // NOTE: We put the CanvasObserver in a member instead of inheriting from it
67     // to avoid adding a vptr to CSSCanvasValue.
68     class CanvasObserverProxy final : public NoBaseWillBeGarbageCollected<CanvasObserverProxy>, public CanvasObserver {
69         WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(CanvasObserverProxy);
70     public:
71         explicit CanvasObserverProxy(CSSCanvasValue* ownerValue) : m_ownerValue(ownerValue) { }
72
73         virtual void canvasChanged(HTMLCanvasElement* canvas, const FloatRect& changedRect) override
74         {
75             m_ownerValue->canvasChanged(canvas, changedRect);
76         }
77         virtual void canvasResized(HTMLCanvasElement* canvas) override
78         {
79             m_ownerValue->canvasResized(canvas);
80         }
81 #if !ENABLE(OILPAN)
82         virtual void canvasDestroyed(HTMLCanvasElement* canvas) override
83         {
84             m_ownerValue->canvasDestroyed(canvas);
85         }
86 #endif
87         virtual void trace(Visitor* visitor) override
88         {
89             visitor->trace(m_ownerValue);
90             CanvasObserver::trace(visitor);
91         }
92
93     private:
94         RawPtrWillBeMember<CSSCanvasValue> m_ownerValue;
95     };
96
97     void canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect);
98     void canvasResized(HTMLCanvasElement*);
99
100 #if !ENABLE(OILPAN)
101     void canvasDestroyed(HTMLCanvasElement*);
102 #endif
103
104     HTMLCanvasElement* element(Document*);
105
106     OwnPtrWillBeMember<CanvasObserverProxy> m_canvasObserver;
107
108     // The name of the canvas.
109     String m_name;
110     // The document supplies the element and owns it.
111     RawPtrWillBeWeakMember<HTMLCanvasElement> m_element;
112 };
113
114 DEFINE_CSS_VALUE_TYPE_CASTS(CSSCanvasValue, isCanvasValue());
115
116 } // namespace blink
117
118 #endif // CSSCanvasValue_h