// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef OffscreenCanvasFrameDispatcherImpl_h
#define OffscreenCanvasFrameDispatcherImpl_h

#include "cc/ipc/mojo_compositor_frame_sink.mojom-blink.h"
#include "cc/resources/shared_bitmap.h"
#include "cc/surfaces/surface_id.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "platform/graphics/OffscreenCanvasFrameDispatcher.h"
#include "platform/graphics/StaticBitmapImage.h"
#include "wtf/Compiler.h"
#include <memory>

namespace blink {

class PLATFORM_EXPORT OffscreenCanvasFrameDispatcherImpl final : public OffscreenCanvasFrameDispatcher
    , WTF_NON_EXPORTED_BASE(public cc::mojom::blink::MojoCompositorFrameSinkClient) {
public:
    explicit OffscreenCanvasFrameDispatcherImpl(uint32_t clientId, uint32_t localId, uint64_t nonce, int width, int height);

    // OffscreenCanvasFrameDispatcher implementation.
    ~OffscreenCanvasFrameDispatcherImpl() override {}
    void dispatchFrame(RefPtr<StaticBitmapImage>) override;

    // cc::mojom::blink::MojoCompositorFrameSinkClient implementation.
    void ReturnResources(Vector<cc::mojom::blink::ReturnedResourcePtr> resources) override;

private:
    const cc::SurfaceId m_surfaceId;
    const int m_width;
    const int m_height;

    unsigned m_nextResourceId;
    unsigned getNextResourceIdAndIncrement() { return m_nextResourceId++; }
    HashMap<unsigned, RefPtr<StaticBitmapImage>> m_cachedImages;
    HashMap<unsigned, std::unique_ptr<cc::SharedBitmap>> m_sharedBitmaps;

    bool verifyImageSize(const sk_sp<SkImage>&);

    cc::mojom::blink::MojoCompositorFrameSinkPtr m_sink;
    mojo::Binding<cc::mojom::blink::MojoCompositorFrameSinkClient> m_binding;
};

} // namespace blink

#endif // OffscreenCanvasFrameDispatcherImpl_h
