// 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 EXTENSIONS_BROWSER_API_PRINTER_PROVIDER_PRINTER_PROVIDER_PRINT_JOB_H_
#define EXTENSIONS_BROWSER_API_PRINTER_PROVIDER_PRINTER_PROVIDER_PRINT_JOB_H_

#include <string>

#include "base/memory/ref_counted.h"
#include "base/memory/ref_counted_memory.h"
#include "base/values.h"

namespace extensions {

// Struct describing print job that should be forwarded to an extension via
// chrome.printerProvider.onPrintRequested event.
// TODO(tbarzic): This should probably be a class and have some methods.
struct PrinterProviderPrintJob {
  PrinterProviderPrintJob();
  PrinterProviderPrintJob(PrinterProviderPrintJob&& other);
  PrinterProviderPrintJob& operator=(PrinterProviderPrintJob&& other);
  ~PrinterProviderPrintJob();

  // The id of the printer that should handle the print job. The id is
  // formatted as <extension_id>:<printer_id>, where <extension_id> is the
  // id of the extension that manages the printer, and <printer_id> is
  // the the printer's id within the extension (as reported via
  // chrome.printerProvider.onGetPrintersRequested event callback).
  std::string printer_id;

  // The print job title.
  std::u16string job_title;

  // The print job ticket.
  base::Value ticket;

  // Content type of the document that should be printed.
  std::string content_type;

  // The document data that should be printed.
  scoped_refptr<base::RefCountedMemory> document_bytes;

 private:
  DISALLOW_COPY_AND_ASSIGN(PrinterProviderPrintJob);
};

}  // namespace extensions

#endif  // EXTENSIONS_BROWSER_API_PRINTER_PROVIDER_PRINTER_PROVIDER_PRINT_JOB_H_
