| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/extensions/api/printing/fake_print_job_controller.h" |
| |
| #include <string> |
| #include <utility> |
| |
| #include "base/functional/bind.h" |
| #include "base/functional/callback.h" |
| #include "base/memory/scoped_refptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "chrome/browser/printing/print_job.h" |
| #include "content/public/browser/browser_task_traits.h" |
| #include "content/public/browser/browser_thread.h" |
| #include "printing/metafile_skia.h" |
| #include "printing/print_settings.h" |
| #include "printing/printed_document.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace extensions { |
| |
| // Subclass PrintJob to allow construction without supplying a PrintJobManager |
| // instance. |
| class PrintJobForTesting : public printing::PrintJob { |
| public: |
| PrintJobForTesting() = default; |
| |
| private: |
| ~PrintJobForTesting() override = default; |
| }; |
| |
| FakePrintJobController::FakePrintJobController() = default; |
| |
| FakePrintJobController::~FakePrintJobController() = default; |
| |
| void FakePrintJobController::CreatePrintJob( |
| std::unique_ptr<printing::MetafileSkia> pdf, |
| std::unique_ptr<printing::PrintSettings> settings, |
| uint32_t page_count, |
| crosapi::mojom::PrintJob::Source source, |
| const std::string& source_id, |
| PrintJobCreatedCallback callback) { |
| auto job = base::MakeRefCounted<PrintJobForTesting>(); |
| job->SetSource(source, source_id); |
| StartWatchingPrintJob(job, std::move(callback)); |
| |
| content::GetUIThreadTaskRunner({})->PostTask( |
| FROM_HERE, |
| base::BindOnce(&FakePrintJobController::CreatePrintJobImpl, |
| weak_ptr_factory_.GetWeakPtr(), job, std::move(settings))); |
| } |
| |
| void FakePrintJobController::CreatePrintJobImpl( |
| scoped_refptr<printing::PrintJob> job, |
| std::unique_ptr<printing::PrintSettings> settings) { |
| job_id_++; |
| auto document = base::MakeRefCounted<printing::PrintedDocument>( |
| std::move(settings), std::u16string(), |
| printing::PrintSettings::NewCookie()); |
| int observer_count = 0; |
| for (auto& observer : job->GetObserversForTesting()) { |
| if (fail_) |
| observer.OnFailed(); |
| else |
| observer.OnDocDone(job_id_, document.get()); |
| observer_count++; |
| } |
| EXPECT_EQ(1, observer_count); |
| } |
| |
| } // namespace extensions |