// 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.

#include "storage/common/blob_storage/blob_item_bytes_request.h"

namespace storage {

BlobItemBytesRequest BlobItemBytesRequest::CreateIPCRequest(
    size_t request_number,
    size_t renderer_item_index,
    size_t renderer_item_offset,
    size_t size) {
  return BlobItemBytesRequest(request_number, IPCBlobItemRequestStrategy::IPC,
                              renderer_item_index, renderer_item_offset, size,
                              kInvalidIndex, kInvalidSize);
}
BlobItemBytesRequest BlobItemBytesRequest::CreateSharedMemoryRequest(
    size_t request_number,
    size_t renderer_item_index,
    size_t renderer_item_offset,
    size_t size,
    size_t handle_index,
    uint64_t handle_offset) {
  return BlobItemBytesRequest(request_number,
                              IPCBlobItemRequestStrategy::SHARED_MEMORY,
                              renderer_item_index, renderer_item_offset, size,
                              handle_index, handle_offset);
}

BlobItemBytesRequest BlobItemBytesRequest::CreateFileRequest(
    size_t request_number,
    size_t renderer_item_index,
    uint64_t renderer_item_offset,
    uint64_t size,
    size_t handle_index,
    uint64_t handle_offset) {
  return BlobItemBytesRequest(request_number, IPCBlobItemRequestStrategy::FILE,
                              renderer_item_index, renderer_item_offset, size,
                              handle_index, handle_offset);
}

BlobItemBytesRequest::BlobItemBytesRequest()
    : request_number(kInvalidIndex),
      transport_strategy(IPCBlobItemRequestStrategy::UNKNOWN),
      renderer_item_index(kInvalidIndex),
      renderer_item_offset(kInvalidSize),
      size(kInvalidSize),
      handle_index(kInvalidIndex),
      handle_offset(kInvalidSize) {}

BlobItemBytesRequest::BlobItemBytesRequest(
    size_t request_number,
    IPCBlobItemRequestStrategy transport_strategy,
    size_t renderer_item_index,
    uint64_t renderer_item_offset,
    uint64_t size,
    size_t handle_index,
    uint64_t handle_offset)
    : request_number(request_number),
      transport_strategy(transport_strategy),
      renderer_item_index(renderer_item_index),
      renderer_item_offset(renderer_item_offset),
      size(size),
      handle_index(handle_index),
      handle_offset(handle_offset) {}

BlobItemBytesRequest::~BlobItemBytesRequest() {}

void PrintTo(const BlobItemBytesRequest& request, std::ostream* os) {
  *os << "{request_number: " << request.request_number
      << ", transport_strategy: "
      << static_cast<int>(request.transport_strategy)
      << ", renderer_item_index: " << request.renderer_item_index
      << ", renderer_item_offset: " << request.renderer_item_offset
      << ", size: " << request.size
      << ", handle_index: " << request.handle_index
      << ", handle_offset: " << request.handle_offset << "}";
}

}  // namespace storage
