// Copyright 2015 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 CONTENT_CHILD_BLOB_STORAGE_BLOB_MESSAGE_FILTER_H_
#define CONTENT_CHILD_BLOB_STORAGE_BLOB_MESSAGE_FILTER_H_

#include <stddef.h>

#include <memory>
#include <string>
#include <vector>

#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/shared_memory.h"
#include "ipc/ipc_platform_file.h"
#include "ipc/message_filter.h"
#include "storage/common/blob_storage/blob_storage_constants.h"

namespace base {
class TaskRunner;
}

namespace IPC {
class Sender;
class Message;
}

namespace storage {
struct BlobItemBytesRequest;
}

namespace content {

// MessageFilter that handles Blob IPCs and delegates them to the
// BlobTransportController singleton. Created on the render thread, and then
// operated on by the IO thread.
class BlobMessageFilter : public IPC::MessageFilter {
 public:
  BlobMessageFilter(scoped_refptr<base::TaskRunner> file_runner);

  void OnChannelClosing() override;
  void OnFilterAdded(IPC::Channel* channel) override;
  bool OnMessageReceived(const IPC::Message& message) override;
  bool GetSupportedMessageClasses(
      std::vector<uint32_t>* supported_message_classes) const override;

 protected:
  ~BlobMessageFilter() override;

 private:
  void OnRequestMemoryItem(
      const std::string& uuid,
      const std::vector<storage::BlobItemBytesRequest>& requests,
      std::vector<base::SharedMemoryHandle> memory_handles,
      const std::vector<IPC::PlatformFileForTransit>& file_handles);

  void OnBlobFinalStatus(const std::string& uuid, storage::BlobStatus code);

  IPC::Sender* sender_;
  scoped_refptr<base::TaskRunner> file_runner_;

  DISALLOW_COPY_AND_ASSIGN(BlobMessageFilter);
};

}  // namespace content
#endif  // CONTENT_CHILD_BLOB_STORAGE_BLOB_MESSAGE_FILTER_H_
