| Index: chrome/browser/chromeos/printing/fake_cups_print_job_manager.cc
|
| diff --git a/chrome/browser/chromeos/printing/fake_cups_print_job_manager.cc b/chrome/browser/chromeos/printing/fake_cups_print_job_manager.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d436d1de87aeb7d0e14f95bc2e3c134f7f86d151
|
| --- /dev/null
|
| +++ b/chrome/browser/chromeos/printing/fake_cups_print_job_manager.cc
|
| @@ -0,0 +1,148 @@
|
| +// 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.
|
| +
|
| +#include "chrome/browser/chromeos/printing/fake_cups_print_job_manager.h"
|
| +
|
| +#include "base/bind.h"
|
| +#include "base/memory/ptr_util.h"
|
| +#include "base/threading/sequenced_task_runner_handle.h"
|
| +#include "chrome/browser/chromeos/printing/cups_print_job.h"
|
| +#include "chrome/browser/chromeos/printing/cups_print_job_manager_factory.h"
|
| +#include "chrome/browser/notifications/notification.h"
|
| +#include "content/public/browser/browser_context.h"
|
| +
|
| +namespace chromeos {
|
| +
|
| +// static
|
| +int FakeCUPSPrintJobManager::next_job_id_ = 0;
|
| +
|
| +// static
|
| +CUPSPrintJobManager* CUPSPrintJobManager::Get(
|
| + content::BrowserContext* browser_context) {
|
| + return CUPSPrintJobManagerFactory::GetForBrowserContext(browser_context);
|
| +}
|
| +
|
| +FakeCUPSPrintJobManager::FakeCUPSPrintJobManager(Profile* profile)
|
| + : CUPSPrintJobManager(profile), weak_ptr_factory_(this) {}
|
| +
|
| +FakeCUPSPrintJobManager::~FakeCUPSPrintJobManager() {}
|
| +
|
| +bool FakeCUPSPrintJobManager::CreatePrintJob(const std::string& printer_name,
|
| + const std::string& title,
|
| + int total_page_number) {
|
| + // Create a new print job.
|
| + std::unique_ptr<CUPSPrintJob> new_job = base::MakeUnique<CUPSPrintJob>(
|
| + printer_name, next_job_id_++, title, total_page_number);
|
| + new_job->GetPrinter()->set_display_name(printer_name);
|
| + print_jobs_.push_back(std::move(new_job));
|
| +
|
| + // Show the waiting-for-printing notification immediately.
|
| + base::SequencedTaskRunnerHandle::Get()->PostNonNestableDelayedTask(
|
| + FROM_HERE,
|
| + base::Bind(&FakeCUPSPrintJobManager::ChangePrintJobState,
|
| + weak_ptr_factory_.GetWeakPtr(), print_jobs_.back().get()),
|
| + base::TimeDelta());
|
| +
|
| + return true;
|
| +}
|
| +
|
| +bool FakeCUPSPrintJobManager::CancelPrintJob(CUPSPrintJob* job) {
|
| + job->set_state(CUPSPrintJob::STATE_CANCELLED);
|
| + for (auto observer : observers_)
|
| + observer->OnPrintJobCancelled(job->job_id());
|
| +
|
| + // Note: |job| is deleted here.
|
| + for (auto iter = print_jobs_.begin(); iter != print_jobs_.end(); ++iter) {
|
| + if (iter->get() == job) {
|
| + print_jobs_.erase(iter);
|
| + break;
|
| + }
|
| + }
|
| +
|
| + return true;
|
| +}
|
| +
|
| +bool FakeCUPSPrintJobManager::SuspendPrintJob(CUPSPrintJob* job) {
|
| + job->set_state(CUPSPrintJob::STATE_SUSPENDED);
|
| + for (auto observer : observers_)
|
| + observer->OnPrintJobSuspended(job);
|
| + return true;
|
| +}
|
| +
|
| +bool FakeCUPSPrintJobManager::ResumePrintJob(CUPSPrintJob* job) {
|
| + job->set_state(CUPSPrintJob::STATE_RESUMED);
|
| + for (auto observer : observers_)
|
| + observer->OnPrintJobResumed(job);
|
| +
|
| + base::SequencedTaskRunnerHandle::Get()->PostNonNestableDelayedTask(
|
| + FROM_HERE, base::Bind(&FakeCUPSPrintJobManager::ChangePrintJobState,
|
| + weak_ptr_factory_.GetWeakPtr(), job),
|
| + base::TimeDelta::FromMilliseconds(3000));
|
| +
|
| + return true;
|
| +}
|
| +
|
| +void FakeCUPSPrintJobManager::ChangePrintJobState(CUPSPrintJob* job) {
|
| + // |job| might have been deleted.
|
| + bool found = false;
|
| + for (auto iter = print_jobs_.begin(); iter != print_jobs_.end(); ++iter) {
|
| + if (iter->get() == job) {
|
| + found = true;
|
| + break;
|
| + }
|
| + }
|
| +
|
| + if (!found || job->state() == CUPSPrintJob::STATE_SUSPENDED ||
|
| + job->state() == CUPSPrintJob::STATE_ERROR) {
|
| + return;
|
| + }
|
| +
|
| + switch (job->state()) {
|
| + case CUPSPrintJob::STATE_NONE:
|
| + job->set_state(CUPSPrintJob::STATE_WAITING);
|
| + for (auto observer : observers_)
|
| + observer->OnPrintJobCreated(job);
|
| + break;
|
| + case CUPSPrintJob::STATE_WAITING:
|
| + job->set_state(CUPSPrintJob::STATE_STARTED);
|
| + for (auto observer : observers_)
|
| + observer->OnPrintJobStarted(job);
|
| + break;
|
| + case CUPSPrintJob::STATE_STARTED:
|
| + job->set_printed_page_number(job->printed_page_number() + 1);
|
| + job->set_state(CUPSPrintJob::STATE_PAGE_DONE);
|
| + for (auto observer : observers_)
|
| + observer->OnPrintJobUpdated(job);
|
| + break;
|
| + case CUPSPrintJob::STATE_PAGE_DONE:
|
| + case CUPSPrintJob::STATE_RESUMED:
|
| + if (job->printed_page_number() == job->total_page_number()) {
|
| + job->set_state(CUPSPrintJob::STATE_DOCUMENT_DONE);
|
| + for (auto observer : observers_)
|
| + observer->OnPrintJobDone(job);
|
| + } else {
|
| + job->set_printed_page_number(job->printed_page_number() + 1);
|
| + job->set_state(CUPSPrintJob::STATE_PAGE_DONE);
|
| + for (auto observer : observers_)
|
| + observer->OnPrintJobUpdated(job);
|
| + }
|
| + break;
|
| + case CUPSPrintJob::STATE_DOCUMENT_DONE:
|
| + // Only for testing
|
| + job->set_state(CUPSPrintJob::STATE_ERROR);
|
| + job->set_error_code(CUPSPrintJob::UNKNOWN_ERROR);
|
| + for (auto observer : observers_)
|
| + observer->OnPrintJobError(job);
|
| + break;
|
| + default:
|
| + break;
|
| + }
|
| +
|
| + base::SequencedTaskRunnerHandle::Get()->PostNonNestableDelayedTask(
|
| + FROM_HERE, base::Bind(&FakeCUPSPrintJobManager::ChangePrintJobState,
|
| + weak_ptr_factory_.GetWeakPtr(), job),
|
| + base::TimeDelta::FromMilliseconds(3000));
|
| +}
|
| +
|
| +} // namespace chromeos
|
|
|