Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(227)

Unified Diff: extensions/browser/api/printer_provider/printer_provider_apitest.cc

Issue 973993003: Instead of ArrayBuffer, pass blob with printerProvider.onPrintRequested (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: kalman feedback Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: extensions/browser/api/printer_provider/printer_provider_apitest.cc
diff --git a/extensions/browser/api/printer_provider/printer_provider_apitest.cc b/extensions/browser/api/printer_provider/printer_provider_apitest.cc
index 0a4662a4d58d7af761e64a07e5cfa7499091eb22..f1b804eec4bca29d97d66741a97aa1d1554bb78f 100644
--- a/extensions/browser/api/printer_provider/printer_provider_apitest.cc
+++ b/extensions/browser/api/printer_provider/printer_provider_apitest.cc
@@ -3,6 +3,10 @@
// found in the LICENSE file.
#include "base/bind.h"
+#include "base/files/file.h"
+#include "base/files/file_path.h"
+#include "base/files/file_util.h"
+#include "base/files/scoped_temp_dir.h"
#include "base/json/json_string_value_serializer.h"
#include "base/memory/ref_counted_memory.h"
#include "base/run_loop.h"
@@ -67,6 +71,13 @@ void RecordDictAndRunCallback(std::string* result,
// Tests for chrome.printerProvider API.
class PrinterProviderApiTest : public extensions::ShellApiTest {
public:
+ enum PrintRequestDataType {
+ PRINT_REQUEST_DATA_TYPE_NOT_SET,
+ PRINT_REQUEST_DATA_TYPE_FILE,
+ PRINT_REQUEST_DATA_TYPE_FILE_DELETED,
+ PRINT_REQUEST_DATA_TYPE_BYTES
+ };
+
PrinterProviderApiTest() {}
~PrinterProviderApiTest() override {}
@@ -77,13 +88,27 @@ class PrinterProviderApiTest : public extensions::ShellApiTest {
->DispatchGetPrintersRequested(callback);
}
- void StartPrintRequest(const std::string& extension_id,
- const PrinterProviderAPI::PrintCallback& callback) {
+ void StartPrintRequestWithNoData(
+ const std::string& extension_id,
+ const PrinterProviderAPI::PrintCallback& callback) {
+ extensions::PrinterProviderPrintJob job;
+ job.printer_id = extension_id + ":printer_id";
+ job.ticket_json = "{}";
+ job.content_type = "application/pdf";
+
+ PrinterProviderAPIFactory::GetInstance()
+ ->GetForBrowserContext(browser_context())
+ ->DispatchPrintRequested(job, callback);
+ }
+
+ void StartPrintRequestUsingDocumentBytes(
+ const std::string& extension_id,
+ const PrinterProviderAPI::PrintCallback& callback) {
extensions::PrinterProviderPrintJob job;
job.printer_id = extension_id + ":printer_id";
job.ticket_json = "{}";
- job.content_type = "content_type";
- const unsigned char kDocumentBytes[] = {'b', 'y', 't', 'e', 's', 0};
+ job.content_type = "application/pdf";
+ const unsigned char kDocumentBytes[] = {'b', 'y', 't', 'e', 's'};
job.document_bytes =
new base::RefCountedBytes(kDocumentBytes, arraysize(kDocumentBytes));
@@ -92,6 +117,28 @@ class PrinterProviderApiTest : public extensions::ShellApiTest {
->DispatchPrintRequested(job, callback);
}
+ bool StartPrintRequestUsingFileInfo(
+ const std::string& extension_id,
+ const PrinterProviderAPI::PrintCallback& callback) {
+ extensions::PrinterProviderPrintJob job;
+
+ const char kBytes[] = {'b', 'y', 't', 'e', 's'};
+ if (!CreateTempFileWithContents(kBytes, static_cast<int>(arraysize(kBytes)),
+ &job.document_path, &job.file_info)) {
+ ADD_FAILURE() << "Failed to create test file.";
+ return false;
+ }
+
+ job.printer_id = extension_id + ":printer_id";
+ job.ticket_json = "{}";
+ job.content_type = "image/pwg-raster";
+
+ PrinterProviderAPIFactory::GetInstance()
+ ->GetForBrowserContext(browser_context())
+ ->DispatchPrintRequested(job, callback);
+ return true;
+ }
+
void StartCapabilityRequest(
const std::string& extension_id,
const PrinterProviderAPI::GetCapabilityCallback& callback) {
@@ -136,6 +183,7 @@ class PrinterProviderApiTest : public extensions::ShellApiTest {
// |test_param|: The test that should be run.
// |expected_result|: The print result the app is expected to report.
void RunPrintRequestTestApp(const std::string& test_param,
+ PrintRequestDataType data_type,
const std::string& expected_result) {
extensions::ResultCatcher catcher;
@@ -148,11 +196,28 @@ class PrinterProviderApiTest : public extensions::ShellApiTest {
base::RunLoop run_loop;
bool success;
std::string print_status;
- StartPrintRequest(extension_id,
- base::Bind(&RecordPrintResultAndRunCallback, &success,
- &print_status, run_loop.QuitClosure()));
+ PrinterProviderAPI::PrintCallback callback =
+ base::Bind(&RecordPrintResultAndRunCallback, &success, &print_status,
+ run_loop.QuitClosure());
+
+ switch (data_type) {
+ case PRINT_REQUEST_DATA_TYPE_NOT_SET:
+ StartPrintRequestWithNoData(extension_id, callback);
+ break;
+ case PRINT_REQUEST_DATA_TYPE_FILE:
+ ASSERT_TRUE(StartPrintRequestUsingFileInfo(extension_id, callback));
+ break;
+ case PRINT_REQUEST_DATA_TYPE_FILE_DELETED:
+ ASSERT_TRUE(StartPrintRequestUsingFileInfo(extension_id, callback));
+ ASSERT_TRUE(data_dir_.Delete());
+ break;
+ case PRINT_REQUEST_DATA_TYPE_BYTES:
+ StartPrintRequestUsingDocumentBytes(extension_id, callback);
+ break;
+ }
- ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
+ if (data_type != PRINT_REQUEST_DATA_TYPE_NOT_SET)
+ ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();
run_loop.Run();
EXPECT_EQ(expected_result, print_status);
@@ -225,28 +290,66 @@ class PrinterProviderApiTest : public extensions::ShellApiTest {
}
private:
+ // Initializes |data_dir_| if needed and creates a file in it containing
+ // provided data.
+ bool CreateTempFileWithContents(const char* data,
+ int size,
+ base::FilePath* path,
+ base::File::Info* file_info) {
+ if (!data_dir_.IsValid() && !data_dir_.CreateUniqueTempDir())
+ return false;
+
+ *path = data_dir_.path().AppendASCII("data.pwg");
+ int written = base::WriteFile(*path, data, size);
+ if (written != size)
+ return false;
+ if (!base::GetFileInfo(*path, file_info))
+ return false;
+ return true;
+ }
+
+ base::ScopedTempDir data_dir_;
+
DISALLOW_COPY_AND_ASSIGN(PrinterProviderApiTest);
};
IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest, PrintJobSuccess) {
- RunPrintRequestTestApp("OK", "OK");
+ RunPrintRequestTestApp("OK", PRINT_REQUEST_DATA_TYPE_BYTES, "OK");
+}
+
+IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest, PrintJobWithFileSuccess) {
+ RunPrintRequestTestApp("OK", PRINT_REQUEST_DATA_TYPE_FILE, "OK");
+}
+
+IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest,
+ PrintJobWithFile_FileDeletedBeforeDispatch) {
+ RunPrintRequestTestApp("OK", PRINT_REQUEST_DATA_TYPE_FILE_DELETED,
+ "INVALID_DATA");
}
IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest, PrintJobAsyncSuccess) {
- RunPrintRequestTestApp("ASYNC_RESPONSE", "OK");
+ RunPrintRequestTestApp("ASYNC_RESPONSE", PRINT_REQUEST_DATA_TYPE_BYTES, "OK");
}
IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest, PrintJobFailed) {
- RunPrintRequestTestApp("INVALID_TICKET", "INVALID_TICKET");
+ RunPrintRequestTestApp("INVALID_TICKET", PRINT_REQUEST_DATA_TYPE_BYTES,
+ "INVALID_TICKET");
}
IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest, NoPrintEventListener) {
- RunPrintRequestTestApp("NO_LISTENER", "FAILED");
+ RunPrintRequestTestApp("NO_LISTENER", PRINT_REQUEST_DATA_TYPE_BYTES,
+ "FAILED");
}
IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest,
PrintRequestInvalidCallbackParam) {
- RunPrintRequestTestApp("INVALID_VALUE", "FAILED");
+ RunPrintRequestTestApp("INVALID_VALUE", PRINT_REQUEST_DATA_TYPE_BYTES,
+ "FAILED");
+}
+
+IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest, PrintRequestDataNotSet) {
+ RunPrintRequestTestApp("IGNORE_CALLBACK", PRINT_REQUEST_DATA_TYPE_NOT_SET,
+ "FAILED");
}
IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest, PrintRequestAppUnloaded) {
@@ -260,8 +363,8 @@ IN_PROC_BROWSER_TEST_F(PrinterProviderApiTest, PrintRequestAppUnloaded) {
base::RunLoop run_loop;
bool success = false;
std::string status;
- StartPrintRequest(extension_id,
- base::Bind(&RecordPrintResultAndRunCallback, &success,
+ StartPrintRequestUsingDocumentBytes(
+ extension_id, base::Bind(&RecordPrintResultAndRunCallback, &success,
&status, run_loop.QuitClosure()));
ASSERT_TRUE(catcher.GetNextResult()) << catcher.message();

Powered by Google App Engine
This is Rietveld 408576698