Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(368)

Side by Side Diff: third_party/WebKit/Source/core/html/canvas/ImageElementBase.cpp

Issue 2817093002: Revert of Adds SVGImageElement as a ImageBitmapSource (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "core/html/canvas/ImageElementBase.h"
6
7 #include "core/frame/ImageBitmap.h"
8 #include "core/frame/LocalDOMWindow.h"
9 #include "core/layout/LayoutObject.h"
10 #include "core/loader/ImageLoader.h"
11 #include "core/svg/graphics/SVGImageForContainer.h"
12
13 namespace blink {
14
15 ImageResourceContent* ImageElementBase::CachedImage() const {
16 return GetImageLoader().GetImage();
17 }
18
19 const Element& ImageElementBase::GetElement() const {
20 return *GetImageLoader().GetElement();
21 }
22
23 bool ImageElementBase::IsSVGSource() const {
24 return CachedImage() && CachedImage()->GetImage()->IsSVGImage();
25 }
26
27 PassRefPtr<Image> ImageElementBase::GetSourceImageForCanvas(
28 SourceImageStatus* status,
29 AccelerationHint,
30 SnapshotReason,
31 const FloatSize& default_object_size) const {
32 if (!GetImageLoader().ImageComplete() || !CachedImage()) {
33 *status = kIncompleteSourceImageStatus;
34 return nullptr;
35 }
36
37 if (CachedImage()->ErrorOccurred()) {
38 *status = kUndecodableSourceImageStatus;
39 return nullptr;
40 }
41
42 RefPtr<Image> source_image;
43 if (CachedImage()->GetImage()->IsSVGImage()) {
44 UseCounter::Count(GetElement().GetDocument(), UseCounter::kSVGInCanvas2D);
45 SVGImage* svg_image = ToSVGImage(CachedImage()->GetImage());
46 IntSize image_size =
47 RoundedIntSize(svg_image->ConcreteObjectSize(default_object_size));
48 source_image = SVGImageForContainer::Create(
49 svg_image, image_size, 1,
50 GetElement().GetDocument().CompleteURL(GetElement().ImageSourceURL()));
51 } else {
52 source_image = CachedImage()->GetImage();
53 }
54
55 *status = kNormalSourceImageStatus;
56 return source_image->ImageForDefaultFrame();
57 }
58
59 bool ImageElementBase::WouldTaintOrigin(
60 SecurityOrigin* destination_security_origin) const {
61 return CachedImage() &&
62 !CachedImage()->IsAccessAllowed(destination_security_origin);
63 }
64
65 FloatSize ImageElementBase::ElementSize(
66 const FloatSize& default_object_size) const {
67 ImageResourceContent* image = CachedImage();
68 if (!image)
69 return FloatSize();
70
71 if (image->GetImage() && image->GetImage()->IsSVGImage()) {
72 return ToSVGImage(CachedImage()->GetImage())
73 ->ConcreteObjectSize(default_object_size);
74 }
75
76 return FloatSize(image->ImageSize(LayoutObject::ShouldRespectImageOrientation(
77 GetElement().GetLayoutObject()),
78 1.0f));
79 }
80
81 FloatSize ImageElementBase::DefaultDestinationSize(
82 const FloatSize& default_object_size) const {
83 ImageResourceContent* image = CachedImage();
84 if (!image)
85 return FloatSize();
86
87 if (image->GetImage() && image->GetImage()->IsSVGImage()) {
88 return ToSVGImage(CachedImage()->GetImage())
89 ->ConcreteObjectSize(default_object_size);
90 }
91
92 LayoutSize size;
93 size = image->ImageSize(LayoutObject::ShouldRespectImageOrientation(
94 GetElement().GetLayoutObject()),
95 1.0f);
96 return FloatSize(size);
97 }
98
99 bool ImageElementBase::IsAccelerated() const {
100 return false;
101 }
102
103 const KURL& ImageElementBase::SourceURL() const {
104 return CachedImage()->GetResponse().Url();
105 }
106
107 int ImageElementBase::SourceWidth() {
108 SourceImageStatus status;
109 RefPtr<Image> image = GetSourceImageForCanvas(&status, kPreferNoAcceleration,
110 kSnapshotReasonUnknown,
111 SourceDefaultObjectSize());
112 return image->width();
113 }
114
115 int ImageElementBase::SourceHeight() {
116 SourceImageStatus status;
117 RefPtr<Image> image = GetSourceImageForCanvas(&status, kPreferNoAcceleration,
118 kSnapshotReasonUnknown,
119 SourceDefaultObjectSize());
120 return image->height();
121 }
122
123 bool ImageElementBase::IsOpaque() const {
124 Image* image = const_cast<Element&>(GetElement()).ImageContents();
125 return image && image->CurrentFrameKnownToBeOpaque();
126 }
127
128 IntSize ImageElementBase::BitmapSourceSize() const {
129 ImageResourceContent* image = CachedImage();
130 if (!image)
131 return IntSize();
132 LayoutSize lSize =
133 image->ImageSize(LayoutObject::ShouldRespectImageOrientation(
134 GetElement().GetLayoutObject()),
135 1.0f);
136 DCHECK(lSize.Fraction().IsZero());
137 return IntSize(lSize.Width().ToInt(), lSize.Height().ToInt());
138 }
139
140 ScriptPromise ImageElementBase::CreateImageBitmap(
141 ScriptState* script_state,
142 EventTarget& event_target,
143 Optional<IntRect> crop_rect,
144 const ImageBitmapOptions& options,
145 ExceptionState& exception_state) {
146 DCHECK(event_target.ToLocalDOMWindow());
147 if ((crop_rect &&
148 !ImageBitmap::IsSourceSizeValid(crop_rect->Width(), crop_rect->Height(),
149 exception_state)) ||
150 !ImageBitmap::IsSourceSizeValid(BitmapSourceSize().Width(),
151 BitmapSourceSize().Height(),
152 exception_state))
153 return ScriptPromise();
154 if (!ImageBitmap::IsResizeOptionValid(options, exception_state))
155 return ScriptPromise();
156 return ImageBitmapSource::FulfillImageBitmap(
157 script_state, ImageBitmap::Create(
158 this, crop_rect,
159 event_target.ToLocalDOMWindow()->document(), options));
160 }
161
162 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698