Pdfium 27d718ebb2989631d6b4d3425e1fceb4b3bc795b

Same as used by Chrome for Android 65.0.3325.109

- use system's zlib, freetype, libjpeg
- don't use xfa, v8, skia

Test: atest CtsPdfTestCases
Fixes: 72134075
Change-Id: Ic144d41e667a0c9310b69625b53850dec5fb3006
diff --git a/fxbarcode/cbc_datamatrix.cpp b/fxbarcode/cbc_datamatrix.cpp
new file mode 100644
index 0000000..c9e23fa
--- /dev/null
+++ b/fxbarcode/cbc_datamatrix.cpp
@@ -0,0 +1,57 @@
+// Copyright 2016 PDFium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+/*
+ * Copyright 2011 ZXing authors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "fxbarcode/cbc_datamatrix.h"
+
+#include <memory>
+
+#include "fxbarcode/datamatrix/BC_DataMatrixWriter.h"
+#include "third_party/base/ptr_util.h"
+
+CBC_DataMatrix::CBC_DataMatrix()
+    : CBC_CodeBase(pdfium::MakeUnique<CBC_DataMatrixWriter>()) {}
+
+CBC_DataMatrix::~CBC_DataMatrix() {}
+
+bool CBC_DataMatrix::Encode(const WideStringView& contents) {
+  int32_t outWidth = 0;
+  int32_t outHeight = 0;
+  auto* pWriter = GetDataMatrixWriter();
+  std::unique_ptr<uint8_t, FxFreeDeleter> data(
+      pWriter->Encode(WideString(contents), outWidth, outHeight));
+  if (!data)
+    return false;
+  return pWriter->RenderResult(data.get(), outWidth, outHeight);
+}
+
+bool CBC_DataMatrix::RenderDevice(CFX_RenderDevice* device,
+                                  const CFX_Matrix* matrix) {
+  GetDataMatrixWriter()->RenderDeviceResult(device, matrix);
+  return true;
+}
+
+BC_TYPE CBC_DataMatrix::GetType() {
+  return BC_DATAMATRIX;
+}
+
+CBC_DataMatrixWriter* CBC_DataMatrix::GetDataMatrixWriter() {
+  return static_cast<CBC_DataMatrixWriter*>(m_pBCWriter.get());
+}