#include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d.h"
#include <stddef.h>
#include <optional>
#include <string_view>
#include "base/check.h"
#include "base/compiler_specific.h"
#include "base/location.h"
#include "base/memory/scoped_refptr.h"
#include "base/metrics/histogram_macros.h"
#include "base/time/time.h"
#include "base/trace_event/common/trace_event_common.h"
#include "cc/layers/texture_layer.h"
#include "cc/paint/paint_canvas.h"
#include "third_party/blink/public/common/metrics/document_update_reason.h"
#include "third_party/blink/public/common/privacy_budget/identifiable_token.h"
#include "third_party/blink/public/mojom/frame/color_scheme.mojom-blink.h"
#include "third_party/blink/public/mojom/scroll/scroll_enums.mojom-blink.h"
#include "third_party/blink/public/mojom/scroll/scroll_into_view_params.mojom-blink.h"
#include "third_party/blink/public/platform/task_type.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_canvas_rendering_context_2d_settings.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_canvas_will_read_frequently.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_typedefs.h"
#include "third_party/blink/renderer/bindings/modules/v8/v8_union_canvasrenderingcontext2d_gpucanvascontext_imagebitmaprenderingcontext_webgl2renderingcontext_webglrenderingcontext.h"
#include "third_party/blink/renderer/core/accessibility/ax_object_cache.h"
#include "third_party/blink/renderer/core/css/css_property_names.h"
#include "third_party/blink/renderer/core/css/css_property_value_set.h"
#include "third_party/blink/renderer/core/css/parser/css_parser.h"
#include "third_party/blink/renderer/core/css/resolver/style_resolver.h"
#include "third_party/blink/renderer/core/css/style_engine.h"
#include "third_party/blink/renderer/core/dom/document.h"
#include "third_party/blink/renderer/core/dom/element.h"
#include "third_party/blink/renderer/core/frame/settings.h"
#include "third_party/blink/renderer/core/html/canvas/canvas_context_creation_attributes_core.h"
#include "third_party/blink/renderer/core/html/canvas/canvas_font_cache.h"
#include "third_party/blink/renderer/core/html/canvas/canvas_performance_monitor.h"
#include "third_party/blink/renderer/core/html/canvas/canvas_rendering_context.h"
#include "third_party/blink/renderer/core/layout/geometry/physical_offset.h"
#include "third_party/blink/renderer/core/layout/geometry/physical_rect.h"
#include "third_party/blink/renderer/core/layout/layout_box.h"
#include "third_party/blink/renderer/core/layout/layout_box_model_object.h"
#include "third_party/blink/renderer/core/layout/layout_theme.h"
#include "third_party/blink/renderer/core/layout/map_coordinates_flags.h"
#include "third_party/blink/renderer/core/scroll/scroll_alignment.h"
#include "third_party/blink/renderer/core/scroll/scroll_into_view_util.h"
#include "third_party/blink/renderer/core/style/computed_style.h"
#include "third_party/blink/renderer/core/style/filter_operations.h"
#include "third_party/blink/renderer/core/svg/svg_resource_client.h"
#include "third_party/blink/renderer/modules/canvas/canvas2d/base_rendering_context_2d.h"
#include "third_party/blink/renderer/modules/canvas/canvas2d/canvas_rendering_context_2d_state.h"
#include "third_party/blink/renderer/modules/canvas/canvas2d/path_2d.h"
#include "third_party/blink/renderer/platform/fonts/font.h"
#include "third_party/blink/renderer/platform/geometry/layout_unit.h"
#include "third_party/blink/renderer/platform/graphics/canvas_2d_layer_bridge.h"
#include "third_party/blink/renderer/platform/graphics/canvas_resource_provider.h"
#include "third_party/blink/renderer/platform/graphics/graphics_types.h"
#include "third_party/blink/renderer/platform/graphics/image_orientation.h"
#include "third_party/blink/renderer/platform/graphics/memory_managed_paint_canvas.h"
#include "third_party/blink/renderer/platform/graphics/memory_managed_paint_recorder.h"
#include "third_party/blink/renderer/platform/graphics/paint/paint_filter.h"
#include "third_party/blink/renderer/platform/graphics/paint/paint_record.h"
#include "third_party/blink/renderer/platform/graphics/skia/skia_utils.h"
#include "third_party/blink/renderer/platform/graphics/static_bitmap_image.h"
#include "third_party/blink/renderer/platform/graphics/stroke_data.h"
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/runtime_enabled_features.h"
#include "third_party/blink/renderer/platform/timer.h"
#include "third_party/blink/renderer/platform/wtf/hash_table.h"
#include "third_party/blink/renderer/platform/wtf/key_value_pair.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "third_party/skia/include/core/SkColor.h"
#include "third_party/skia/include/core/SkRect.h"
#include "third_party/skia/include/core/SkRefCnt.h"
#include "ui/gfx/geometry/rect_f.h"
#include "ui/gfx/geometry/size.h"
namespace base {
struct PendingTask;
}
namespace cc {
class PaintFlags;
}
namespace blink {
class ExecutionContext;
class FontSelector;
class ImageData;
class ImageDataSettings;
class LayoutObject;
class SVGResource;
static mojom::blink::ColorScheme GetColorSchemeFromCanvas(
HTMLCanvasElement* canvas) { … }
CanvasRenderingContext* CanvasRenderingContext2D::Factory::Create(
CanvasRenderingContextHost* host,
const CanvasContextCreationAttributesCore& attrs) { … }
CanvasRenderingContext2D::CanvasRenderingContext2D(
HTMLCanvasElement* canvas,
const CanvasContextCreationAttributesCore& attrs)
: … { … }
V8RenderingContext* CanvasRenderingContext2D::AsV8RenderingContext() { … }
CanvasRenderingContext2D::~CanvasRenderingContext2D() = default;
bool CanvasRenderingContext2D::IsOriginTopLeft() const { … }
bool CanvasRenderingContext2D::IsComposited() const { … }
void CanvasRenderingContext2D::Stop() { … }
void CanvasRenderingContext2D::SendContextLostEventIfNeeded() { … }
void CanvasRenderingContext2D::LoseContext(LostContextMode lost_mode) { … }
void CanvasRenderingContext2D::DidSetSurfaceSize() { … }
void CanvasRenderingContext2D::Trace(Visitor* visitor) const { … }
void CanvasRenderingContext2D::TryRestoreContextEvent(TimerBase* timer) { … }
void CanvasRenderingContext2D::WillDrawImage(CanvasImageSource* source) const { … }
bool CanvasRenderingContext2D::WritePixels(const SkImageInfo& orig_info,
const void* pixels,
size_t row_bytes,
int x,
int y) { … }
void CanvasRenderingContext2D::Reset() { … }
void CanvasRenderingContext2D::RestoreCanvasMatrixClipStack(
cc::PaintCanvas* c) const { … }
bool CanvasRenderingContext2D::ShouldAntialias() const { … }
void CanvasRenderingContext2D::SetShouldAntialias(bool do_aa) { … }
void CanvasRenderingContext2D::ScrollPathIntoViewInternal(const Path& path) { … }
void CanvasRenderingContext2D::clearRect(double x,
double y,
double width,
double height) { … }
sk_sp<PaintFilter> CanvasRenderingContext2D::StateGetFilter() { … }
cc::PaintCanvas* CanvasRenderingContext2D::GetOrCreatePaintCanvas() { … }
const cc::PaintCanvas* CanvasRenderingContext2D::GetPaintCanvas() const { … }
const MemoryManagedPaintRecorder* CanvasRenderingContext2D::Recorder() const { … }
void CanvasRenderingContext2D::WillDraw(
const SkIRect& dirty_rect,
CanvasPerformanceMonitor::DrawType draw_type) { … }
std::optional<cc::PaintRecord> CanvasRenderingContext2D::FlushCanvas(
FlushReason reason) { … }
bool CanvasRenderingContext2D::WillSetFont() const { … }
bool CanvasRenderingContext2D::CurrentFontResolvedAndUpToDate() const { … }
void CanvasRenderingContext2D::setFontForTesting(const String& new_font) { … }
bool CanvasRenderingContext2D::ResolveFont(const String& new_font) { … }
void CanvasRenderingContext2D::DidProcessTask(
const base::PendingTask& pending_task) { … }
void CanvasRenderingContext2D::PruneLocalFontCache(size_t target_size) { … }
void CanvasRenderingContext2D::StyleDidChange(const ComputedStyle* old_style,
const ComputedStyle& new_style) { … }
void CanvasRenderingContext2D::ClearFilterReferences() { … }
void CanvasRenderingContext2D::UpdateFilterReferences(
const FilterOperations& filters) { … }
void CanvasRenderingContext2D::ResourceContentChanged(SVGResource*) { … }
bool CanvasRenderingContext2D::OriginClean() const { … }
void CanvasRenderingContext2D::SetOriginTainted() { … }
int CanvasRenderingContext2D::Width() const { … }
int CanvasRenderingContext2D::Height() const { … }
bool CanvasRenderingContext2D::CanCreateCanvas2dResourceProvider() const { … }
scoped_refptr<StaticBitmapImage> blink::CanvasRenderingContext2D::GetImage(
FlushReason reason) { … }
ImageData* CanvasRenderingContext2D::getImageDataInternal(
int sx,
int sy,
int sw,
int sh,
ImageDataSettings* image_data_settings,
ExceptionState& exception_state) { … }
void CanvasRenderingContext2D::FinalizeFrame(FlushReason reason) { … }
CanvasRenderingContextHost*
CanvasRenderingContext2D::GetCanvasRenderingContextHost() const { … }
ExecutionContext* CanvasRenderingContext2D::GetTopExecutionContext() const { … }
Color CanvasRenderingContext2D::GetCurrentColor() const { … }
void CanvasRenderingContext2D::PageVisibilityChanged() { … }
cc::Layer* CanvasRenderingContext2D::CcLayer() const { … }
CanvasRenderingContext2DSettings*
CanvasRenderingContext2D::getContextAttributes() const { … }
void CanvasRenderingContext2D::drawFocusIfNeeded(Element* element) { … }
void CanvasRenderingContext2D::drawFocusIfNeeded(Path2D* path2d,
Element* element) { … }
void CanvasRenderingContext2D::DrawFocusIfNeededInternal(
const Path& path,
Element* element,
IdentifiableToken path_token) { … }
bool CanvasRenderingContext2D::FocusRingCallIsValid(const Path& path,
Element* element) { … }
void CanvasRenderingContext2D::DrawFocusRing(const Path& path,
Element* element) { … }
void CanvasRenderingContext2D::UpdateElementAccessibility(const Path& path,
Element* element) { … }
void CanvasRenderingContext2D::DisableAcceleration() { … }
bool CanvasRenderingContext2D::ShouldDisableAccelerationBecauseOfReadback()
const { … }
bool CanvasRenderingContext2D::IsCanvas2DBufferValid() const { … }
void CanvasRenderingContext2D::ColorSchemeMayHaveChanged() { … }
RespectImageOrientationEnum CanvasRenderingContext2D::RespectImageOrientation()
const { … }
HTMLCanvasElement* CanvasRenderingContext2D::HostAsHTMLCanvasElement() const { … }
FontSelector* CanvasRenderingContext2D::GetFontSelector() const { … }
int CanvasRenderingContext2D::LayerCount() const { … }
}