diff --git a/fxbarcode/BC_TwoDimWriter.cpp b/fxbarcode/BC_TwoDimWriter.cpp
index b88574c..4a73dd5 100644
--- a/fxbarcode/BC_TwoDimWriter.cpp
+++ b/fxbarcode/BC_TwoDimWriter.cpp
@@ -15,7 +15,6 @@
 #include "fxbarcode/BC_Writer.h"
 #include "fxbarcode/common/BC_CommonBitMatrix.h"
 #include "third_party/base/numerics/safe_math.h"
-#include "third_party/base/ptr_util.h"
 
 CBC_TwoDimWriter::CBC_TwoDimWriter(bool bFixedSize)
     : m_bFixedSize(bFixedSize) {}
@@ -71,7 +70,7 @@
   m_leftPadding = std::max((m_Width - m_outputWidth) / 2, 0);
   m_topPadding = std::max((m_Height - m_outputHeight) / 2, 0);
 
-  m_output = pdfium::MakeUnique<CBC_CommonBitMatrix>();
+  m_output = std::make_unique<CBC_CommonBitMatrix>();
   m_output->Init(m_inputWidth, m_inputHeight);
 
   for (int32_t y = 0; y < m_inputHeight; ++y) {
diff --git a/fxbarcode/cbc_codabar.cpp b/fxbarcode/cbc_codabar.cpp
index 70500f4..5bb8e00 100644
--- a/fxbarcode/cbc_codabar.cpp
+++ b/fxbarcode/cbc_codabar.cpp
@@ -25,10 +25,9 @@
 
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "fxbarcode/oned/BC_OnedCodaBarWriter.h"
-#include "third_party/base/ptr_util.h"
 
 CBC_Codabar::CBC_Codabar()
-    : CBC_OneCode(pdfium::MakeUnique<CBC_OnedCodaBarWriter>()) {}
+    : CBC_OneCode(std::make_unique<CBC_OnedCodaBarWriter>()) {}
 
 CBC_Codabar::~CBC_Codabar() = default;
 
diff --git a/fxbarcode/cbc_code128.cpp b/fxbarcode/cbc_code128.cpp
index 4c872bc..83c8abe 100644
--- a/fxbarcode/cbc_code128.cpp
+++ b/fxbarcode/cbc_code128.cpp
@@ -25,10 +25,9 @@
 
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "fxbarcode/oned/BC_OnedCode128Writer.h"
-#include "third_party/base/ptr_util.h"
 
 CBC_Code128::CBC_Code128(BC_TYPE type)
-    : CBC_OneCode(pdfium::MakeUnique<CBC_OnedCode128Writer>(type)) {}
+    : CBC_OneCode(std::make_unique<CBC_OnedCode128Writer>(type)) {}
 
 CBC_Code128::~CBC_Code128() = default;
 
diff --git a/fxbarcode/cbc_code39.cpp b/fxbarcode/cbc_code39.cpp
index f6600c4..4402cc4 100644
--- a/fxbarcode/cbc_code39.cpp
+++ b/fxbarcode/cbc_code39.cpp
@@ -25,10 +25,9 @@
 
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "fxbarcode/oned/BC_OnedCode39Writer.h"
-#include "third_party/base/ptr_util.h"
 
 CBC_Code39::CBC_Code39()
-    : CBC_OneCode(pdfium::MakeUnique<CBC_OnedCode39Writer>()) {}
+    : CBC_OneCode(std::make_unique<CBC_OnedCode39Writer>()) {}
 
 CBC_Code39::~CBC_Code39() = default;
 
diff --git a/fxbarcode/cbc_datamatrix.cpp b/fxbarcode/cbc_datamatrix.cpp
index 930f564..1136b49 100644
--- a/fxbarcode/cbc_datamatrix.cpp
+++ b/fxbarcode/cbc_datamatrix.cpp
@@ -21,14 +21,14 @@
 
 #include "fxbarcode/cbc_datamatrix.h"
 
+#include <memory>
 #include <vector>
 
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "fxbarcode/datamatrix/BC_DataMatrixWriter.h"
-#include "third_party/base/ptr_util.h"
 
 CBC_DataMatrix::CBC_DataMatrix()
-    : CBC_CodeBase(pdfium::MakeUnique<CBC_DataMatrixWriter>()) {}
+    : CBC_CodeBase(std::make_unique<CBC_DataMatrixWriter>()) {}
 
 CBC_DataMatrix::~CBC_DataMatrix() = default;
 
diff --git a/fxbarcode/cbc_ean13.cpp b/fxbarcode/cbc_ean13.cpp
index 934e61c..f1290f7 100644
--- a/fxbarcode/cbc_ean13.cpp
+++ b/fxbarcode/cbc_ean13.cpp
@@ -24,10 +24,8 @@
 #include <memory>
 
 #include "fxbarcode/oned/BC_OnedEAN13Writer.h"
-#include "third_party/base/ptr_util.h"
 
-CBC_EAN13::CBC_EAN13()
-    : CBC_EANCode(pdfium::MakeUnique<CBC_OnedEAN13Writer>()) {}
+CBC_EAN13::CBC_EAN13() : CBC_EANCode(std::make_unique<CBC_OnedEAN13Writer>()) {}
 
 CBC_EAN13::~CBC_EAN13() = default;
 
diff --git a/fxbarcode/cbc_ean8.cpp b/fxbarcode/cbc_ean8.cpp
index 84ed672..73d8f38 100644
--- a/fxbarcode/cbc_ean8.cpp
+++ b/fxbarcode/cbc_ean8.cpp
@@ -24,9 +24,8 @@
 #include <memory>
 
 #include "fxbarcode/oned/BC_OnedEAN8Writer.h"
-#include "third_party/base/ptr_util.h"
 
-CBC_EAN8::CBC_EAN8() : CBC_EANCode(pdfium::MakeUnique<CBC_OnedEAN8Writer>()) {}
+CBC_EAN8::CBC_EAN8() : CBC_EANCode(std::make_unique<CBC_OnedEAN8Writer>()) {}
 
 CBC_EAN8::~CBC_EAN8() = default;
 
diff --git a/fxbarcode/cbc_pdf417i.cpp b/fxbarcode/cbc_pdf417i.cpp
index 14883d7..771cad3 100644
--- a/fxbarcode/cbc_pdf417i.cpp
+++ b/fxbarcode/cbc_pdf417i.cpp
@@ -21,11 +21,11 @@
 
 #include "fxbarcode/cbc_pdf417i.h"
 
+#include <memory>
 #include <vector>
 
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "fxbarcode/pdf417/BC_PDF417Writer.h"
-#include "third_party/base/ptr_util.h"
 
 namespace {
 
@@ -36,7 +36,7 @@
 }  // namespace
 
 CBC_PDF417I::CBC_PDF417I()
-    : CBC_CodeBase(pdfium::MakeUnique<CBC_PDF417Writer>()) {}
+    : CBC_CodeBase(std::make_unique<CBC_PDF417Writer>()) {}
 
 CBC_PDF417I::~CBC_PDF417I() {}
 
diff --git a/fxbarcode/cbc_qrcode.cpp b/fxbarcode/cbc_qrcode.cpp
index 60d3e44..697963a 100644
--- a/fxbarcode/cbc_qrcode.cpp
+++ b/fxbarcode/cbc_qrcode.cpp
@@ -21,14 +21,13 @@
 
 #include "fxbarcode/cbc_qrcode.h"
 
+#include <memory>
 #include <vector>
 
 #include "core/fxcrt/fx_memory_wrappers.h"
 #include "fxbarcode/qrcode/BC_QRCodeWriter.h"
-#include "third_party/base/ptr_util.h"
 
-CBC_QRCode::CBC_QRCode()
-    : CBC_CodeBase(pdfium::MakeUnique<CBC_QRCodeWriter>()) {}
+CBC_QRCode::CBC_QRCode() : CBC_CodeBase(std::make_unique<CBC_QRCodeWriter>()) {}
 
 CBC_QRCode::~CBC_QRCode() = default;
 
diff --git a/fxbarcode/cbc_upca.cpp b/fxbarcode/cbc_upca.cpp
index 3a3e87f..e0a673d 100644
--- a/fxbarcode/cbc_upca.cpp
+++ b/fxbarcode/cbc_upca.cpp
@@ -24,9 +24,8 @@
 #include <memory>
 
 #include "fxbarcode/oned/BC_OnedUPCAWriter.h"
-#include "third_party/base/ptr_util.h"
 
-CBC_UPCA::CBC_UPCA() : CBC_EANCode(pdfium::MakeUnique<CBC_OnedUPCAWriter>()) {}
+CBC_UPCA::CBC_UPCA() : CBC_EANCode(std::make_unique<CBC_OnedUPCAWriter>()) {}
 
 CBC_UPCA::~CBC_UPCA() = default;
 
diff --git a/fxbarcode/cfx_barcode.cpp b/fxbarcode/cfx_barcode.cpp
index 54addad..f3ac26c 100644
--- a/fxbarcode/cfx_barcode.cpp
+++ b/fxbarcode/cfx_barcode.cpp
@@ -26,27 +26,27 @@
 std::unique_ptr<CBC_CodeBase> CreateBarCodeEngineObject(BC_TYPE type) {
   switch (type) {
     case BC_CODE39:
-      return pdfium::MakeUnique<CBC_Code39>();
+      return std::make_unique<CBC_Code39>();
     case BC_CODABAR:
-      return pdfium::MakeUnique<CBC_Codabar>();
+      return std::make_unique<CBC_Codabar>();
     case BC_CODE128:
-      return pdfium::MakeUnique<CBC_Code128>(BC_CODE128_B);
+      return std::make_unique<CBC_Code128>(BC_CODE128_B);
     case BC_CODE128_B:
-      return pdfium::MakeUnique<CBC_Code128>(BC_CODE128_B);
+      return std::make_unique<CBC_Code128>(BC_CODE128_B);
     case BC_CODE128_C:
-      return pdfium::MakeUnique<CBC_Code128>(BC_CODE128_C);
+      return std::make_unique<CBC_Code128>(BC_CODE128_C);
     case BC_EAN8:
-      return pdfium::MakeUnique<CBC_EAN8>();
+      return std::make_unique<CBC_EAN8>();
     case BC_UPCA:
-      return pdfium::MakeUnique<CBC_UPCA>();
+      return std::make_unique<CBC_UPCA>();
     case BC_EAN13:
-      return pdfium::MakeUnique<CBC_EAN13>();
+      return std::make_unique<CBC_EAN13>();
     case BC_QR_CODE:
-      return pdfium::MakeUnique<CBC_QRCode>();
+      return std::make_unique<CBC_QRCode>();
     case BC_PDF417:
-      return pdfium::MakeUnique<CBC_PDF417I>();
+      return std::make_unique<CBC_PDF417I>();
     case BC_DATAMATRIX:
-      return pdfium::MakeUnique<CBC_DataMatrix>();
+      return std::make_unique<CBC_DataMatrix>();
     case BC_UNKNOWN:
     default:
       return nullptr;
diff --git a/fxbarcode/cfx_barcode_unittest.cpp b/fxbarcode/cfx_barcode_unittest.cpp
index 571c6ca..f4c0304 100644
--- a/fxbarcode/cfx_barcode_unittest.cpp
+++ b/fxbarcode/cfx_barcode_unittest.cpp
@@ -16,14 +16,13 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "testing/utils/bitmap_saver.h"
 #include "testing/utils/hash.h"
-#include "third_party/base/ptr_util.h"
 
 class BarcodeTest : public testing::Test {
  public:
   void SetUp() override {
     BC_Library_Init();
 
-    auto device = pdfium::MakeUnique<CFX_DefaultRenderDevice>();
+    auto device = std::make_unique<CFX_DefaultRenderDevice>();
     auto bitmap = pdfium::MakeRetain<CFX_DIBitmap>();
     if (bitmap->Create(640, 480, FXDIB_Rgb32))
       bitmap_ = bitmap;
diff --git a/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp b/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp
index f19886e..1261927 100644
--- a/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp
+++ b/fxbarcode/common/reedsolomon/BC_ReedSolomon.cpp
@@ -27,11 +27,10 @@
 
 #include "fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h"
 #include "fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h"
-#include "third_party/base/ptr_util.h"
 
 CBC_ReedSolomonEncoder::CBC_ReedSolomonEncoder(CBC_ReedSolomonGF256* field)
     : m_field(field) {
-  m_cachedGenerators.push_back(pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>(
+  m_cachedGenerators.push_back(std::make_unique<CBC_ReedSolomonGF256Poly>(
       m_field.Get(), std::vector<int32_t>{1}));
 }
 
diff --git a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
index f2d86b3..433418b 100644
--- a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
+++ b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.cpp
@@ -25,7 +25,6 @@
 #include <vector>
 
 #include "fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.h"
-#include "third_party/base/ptr_util.h"
 
 CBC_ReedSolomonGF256::CBC_ReedSolomonGF256(int32_t primitive) {
   int32_t x = 1;
@@ -43,10 +42,10 @@
 }
 
 void CBC_ReedSolomonGF256::Init() {
-  m_zero = pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>(
-      this, std::vector<int32_t>{0});
-  m_one = pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>(this,
-                                                       std::vector<int32_t>{1});
+  m_zero =
+      std::make_unique<CBC_ReedSolomonGF256Poly>(this, std::vector<int32_t>{0});
+  m_one =
+      std::make_unique<CBC_ReedSolomonGF256Poly>(this, std::vector<int32_t>{1});
 }
 
 CBC_ReedSolomonGF256::~CBC_ReedSolomonGF256() {}
@@ -62,7 +61,7 @@
 
   std::vector<int32_t> coefficients(degree + 1);
   coefficients[0] = coefficient;
-  return pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>(this, coefficients);
+  return std::make_unique<CBC_ReedSolomonGF256Poly>(this, coefficients);
 }
 
 // static
diff --git a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp
index 4339502..5f4ba3e 100644
--- a/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp
+++ b/fxbarcode/common/reedsolomon/BC_ReedSolomonGF256Poly.cpp
@@ -27,7 +27,6 @@
 
 #include "core/fxcrt/fx_system.h"
 #include "fxbarcode/common/reedsolomon/BC_ReedSolomonGF256.h"
-#include "third_party/base/ptr_util.h"
 #include "third_party/base/stl_util.h"
 
 CBC_ReedSolomonGF256Poly::CBC_ReedSolomonGF256Poly(
@@ -75,8 +74,8 @@
 
 std::unique_ptr<CBC_ReedSolomonGF256Poly> CBC_ReedSolomonGF256Poly::Clone()
     const {
-  return pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>(m_field.Get(),
-                                                      m_coefficients);
+  return std::make_unique<CBC_ReedSolomonGF256Poly>(m_field.Get(),
+                                                    m_coefficients);
 }
 
 std::unique_ptr<CBC_ReedSolomonGF256Poly>
@@ -100,7 +99,7 @@
     sumDiff[i] = CBC_ReedSolomonGF256::AddOrSubtract(
         smallerCoefficients[i - lengthDiff], largerCoefficients[i]);
   }
-  return pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>(m_field.Get(), sumDiff);
+  return std::make_unique<CBC_ReedSolomonGF256Poly>(m_field.Get(), sumDiff);
 }
 
 std::unique_ptr<CBC_ReedSolomonGF256Poly> CBC_ReedSolomonGF256Poly::Multiply(
@@ -120,7 +119,7 @@
           product[i + j], m_field->Multiply(aCoeff, bCoefficients[j]));
     }
   }
-  return pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>(m_field.Get(), product);
+  return std::make_unique<CBC_ReedSolomonGF256Poly>(m_field.Get(), product);
 }
 
 std::unique_ptr<CBC_ReedSolomonGF256Poly>
@@ -136,7 +135,7 @@
   for (size_t i = 0; i < size; i++)
     product[i] = m_field->Multiply(m_coefficients[i], coefficient);
 
-  return pdfium::MakeUnique<CBC_ReedSolomonGF256Poly>(m_field.Get(), product);
+  return std::make_unique<CBC_ReedSolomonGF256Poly>(m_field.Get(), product);
 }
 
 std::unique_ptr<CBC_ReedSolomonGF256Poly> CBC_ReedSolomonGF256Poly::Divide(
diff --git a/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp b/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp
index ac3e24c..cccf73d 100644
--- a/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp
+++ b/fxbarcode/datamatrix/BC_DataMatrixWriter.cpp
@@ -41,7 +41,6 @@
 #include "fxbarcode/datamatrix/BC_SymbolInfo.h"
 #include "fxbarcode/datamatrix/BC_TextEncoder.h"
 #include "fxbarcode/datamatrix/BC_X12Encoder.h"
-#include "third_party/base/ptr_util.h"
 #include "third_party/base/stl_util.h"
 
 namespace {
@@ -58,7 +57,7 @@
   int32_t height = symbolInfo->GetSymbolHeight();
   ASSERT(height);
 
-  auto matrix = pdfium::MakeUnique<CBC_CommonByteMatrix>(width, height);
+  auto matrix = std::make_unique<CBC_CommonByteMatrix>(width, height);
   int32_t matrixY = 0;
   for (int32_t y = 0; y < symbolHeight; y++) {
     int32_t matrixX;
@@ -132,7 +131,7 @@
   ASSERT(height);
 
   auto placement =
-      pdfium::MakeUnique<CBC_DefaultPlacement>(codewords, width, height);
+      std::make_unique<CBC_DefaultPlacement>(codewords, width, height);
   placement->place();
   auto bytematrix = encodeLowLevel(placement.get(), pSymbolInfo);
   if (!bytematrix)
diff --git a/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp b/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
index 39f2299..8b04e91 100644
--- a/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
+++ b/fxbarcode/datamatrix/BC_HighLevelEncoder.cpp
@@ -39,7 +39,6 @@
 #include "fxbarcode/datamatrix/BC_SymbolInfo.h"
 #include "fxbarcode/datamatrix/BC_TextEncoder.h"
 #include "fxbarcode/datamatrix/BC_X12Encoder.h"
-#include "third_party/base/ptr_util.h"
 
 namespace {
 
@@ -145,12 +144,12 @@
   }
 
   std::vector<std::unique_ptr<CBC_Encoder>> encoders;
-  encoders.push_back(pdfium::MakeUnique<CBC_ASCIIEncoder>());
-  encoders.push_back(pdfium::MakeUnique<CBC_C40Encoder>());
-  encoders.push_back(pdfium::MakeUnique<CBC_TextEncoder>());
-  encoders.push_back(pdfium::MakeUnique<CBC_X12Encoder>());
-  encoders.push_back(pdfium::MakeUnique<CBC_EdifactEncoder>());
-  encoders.push_back(pdfium::MakeUnique<CBC_Base256Encoder>());
+  encoders.push_back(std::make_unique<CBC_ASCIIEncoder>());
+  encoders.push_back(std::make_unique<CBC_C40Encoder>());
+  encoders.push_back(std::make_unique<CBC_TextEncoder>());
+  encoders.push_back(std::make_unique<CBC_X12Encoder>());
+  encoders.push_back(std::make_unique<CBC_EdifactEncoder>());
+  encoders.push_back(std::make_unique<CBC_Base256Encoder>());
   Encoding encodingMode = Encoding::ASCII;
   while (context.hasMoreCharacters()) {
     if (!encoders[EncoderIndex(encodingMode)]->Encode(&context))
diff --git a/fxbarcode/oned/BC_OnedUPCAWriter.cpp b/fxbarcode/oned/BC_OnedUPCAWriter.cpp
index cf6a4dc..c3daa3c 100644
--- a/fxbarcode/oned/BC_OnedUPCAWriter.cpp
+++ b/fxbarcode/oned/BC_OnedUPCAWriter.cpp
@@ -31,7 +31,6 @@
 #include "fxbarcode/BC_Writer.h"
 #include "fxbarcode/oned/BC_OneDimWriter.h"
 #include "fxbarcode/oned/BC_OnedEAN13Writer.h"
-#include "third_party/base/ptr_util.h"
 
 CBC_OnedUPCAWriter::CBC_OnedUPCAWriter() {
   m_bLeftPadding = true;
@@ -63,7 +62,7 @@
 }
 
 void CBC_OnedUPCAWriter::InitEANWriter() {
-  m_subWriter = pdfium::MakeUnique<CBC_OnedEAN13Writer>();
+  m_subWriter = std::make_unique<CBC_OnedEAN13Writer>();
 }
 
 int32_t CBC_OnedUPCAWriter::CalcChecksum(const ByteString& contents) {
diff --git a/fxbarcode/pdf417/BC_PDF417.cpp b/fxbarcode/pdf417/BC_PDF417.cpp
index b9ba390..0048175 100644
--- a/fxbarcode/pdf417/BC_PDF417.cpp
+++ b/fxbarcode/pdf417/BC_PDF417.cpp
@@ -26,7 +26,6 @@
 #include "fxbarcode/pdf417/BC_PDF417BarcodeRow.h"
 #include "fxbarcode/pdf417/BC_PDF417ErrorCorrection.h"
 #include "fxbarcode/pdf417/BC_PDF417HighLevelEncoder.h"
-#include "third_party/base/ptr_util.h"
 
 namespace {
 
@@ -396,7 +395,7 @@
     return false;
 
   WideString fullCodewords = dataCodewords + ec.value();
-  m_barcodeMatrix = pdfium::MakeUnique<CBC_BarcodeMatrix>(cols, rows);
+  m_barcodeMatrix = std::make_unique<CBC_BarcodeMatrix>(cols, rows);
   encodeLowLevel(fullCodewords, cols, rows, errorCorrectionLevel,
                  m_barcodeMatrix.get());
   return true;
diff --git a/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp b/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp
index e7cb1f1..67a302c 100644
--- a/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp
+++ b/fxbarcode/pdf417/BC_PDF417BarcodeMatrix.cpp
@@ -22,13 +22,12 @@
 
 #include "fxbarcode/pdf417/BC_PDF417BarcodeMatrix.h"
 #include "fxbarcode/pdf417/BC_PDF417BarcodeRow.h"
-#include "third_party/base/ptr_util.h"
 
 CBC_BarcodeMatrix::CBC_BarcodeMatrix(size_t width, size_t height)
     : m_width((width + 4) * 17 + 1), m_height(height) {
   m_matrix.resize(m_height);
   for (size_t i = 0; i < m_height; ++i)
-    m_matrix[i] = pdfium::MakeUnique<CBC_BarcodeRow>(m_width);
+    m_matrix[i] = std::make_unique<CBC_BarcodeRow>(m_width);
 }
 
 CBC_BarcodeMatrix::~CBC_BarcodeMatrix() {}
diff --git a/fxbarcode/qrcode/BC_QRCoderEncoder.cpp b/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
index e809f42..5611eae 100644
--- a/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
+++ b/fxbarcode/qrcode/BC_QRCoderEncoder.cpp
@@ -39,7 +39,6 @@
 #include "fxbarcode/qrcode/BC_QRCoderMode.h"
 #include "fxbarcode/qrcode/BC_QRCoderVersion.h"
 #include "third_party/base/optional.h"
-#include "third_party/base/ptr_util.h"
 #include "third_party/base/stl_util.h"
 
 using ModeStringPair = std::pair<CBC_QRCoderMode*, ByteString>;
@@ -450,7 +449,7 @@
     return false;
   }
 
-  auto matrix = pdfium::MakeUnique<CBC_CommonByteMatrix>(
+  auto matrix = std::make_unique<CBC_CommonByteMatrix>(
       qrCode->GetMatrixWidth(), qrCode->GetMatrixWidth());
   Optional<int32_t> maskPattern = ChooseMaskPattern(
       &finalBits, qrCode->GetECLevel(), qrCode->GetVersion(), matrix.get());
diff --git a/fxbarcode/qrcode/BC_QRCoderVersion.cpp b/fxbarcode/qrcode/BC_QRCoderVersion.cpp
index 9263ee7..f0074d2 100644
--- a/fxbarcode/qrcode/BC_QRCoderVersion.cpp
+++ b/fxbarcode/qrcode/BC_QRCoderVersion.cpp
@@ -29,7 +29,6 @@
 #include "fxbarcode/qrcode/BC_QRCoderBitVector.h"
 #include "fxbarcode/qrcode/BC_QRCoderECBlocksData.h"
 #include "fxbarcode/qrcode/BC_QRCoderErrorCorrectionLevel.h"
-#include "third_party/base/ptr_util.h"
 
 namespace {
 
@@ -40,10 +39,10 @@
 CBC_QRCoderVersion::CBC_QRCoderVersion(int32_t versionNumber,
                                        const CBC_QRCoderECBlockData data[4])
     : m_versionNumber(versionNumber) {
-  m_ecBlocksArray[0] = pdfium::MakeUnique<CBC_QRCoderECBlocks>(data[0]);
-  m_ecBlocksArray[1] = pdfium::MakeUnique<CBC_QRCoderECBlocks>(data[1]);
-  m_ecBlocksArray[2] = pdfium::MakeUnique<CBC_QRCoderECBlocks>(data[2]);
-  m_ecBlocksArray[3] = pdfium::MakeUnique<CBC_QRCoderECBlocks>(data[3]);
+  m_ecBlocksArray[0] = std::make_unique<CBC_QRCoderECBlocks>(data[0]);
+  m_ecBlocksArray[1] = std::make_unique<CBC_QRCoderECBlocks>(data[1]);
+  m_ecBlocksArray[2] = std::make_unique<CBC_QRCoderECBlocks>(data[2]);
+  m_ecBlocksArray[3] = std::make_unique<CBC_QRCoderECBlocks>(data[3]);
   m_totalCodeWords = m_ecBlocksArray[0]->GetTotalDataCodeWords();
 }
 
@@ -66,7 +65,7 @@
   if (g_VERSION->empty()) {
     for (int i = 0; i < kMaxVersion; ++i) {
       g_VERSION->push_back(
-          pdfium::MakeUnique<CBC_QRCoderVersion>(i + 1, g_ECBData[i]));
+          std::make_unique<CBC_QRCoderVersion>(i + 1, g_ECBData[i]));
     }
   }
   if (versionNumber < 1 || versionNumber > kMaxVersion)
