diff --git a/core/fpdfapi/parser/cpdf_array.cpp b/core/fpdfapi/parser/cpdf_array.cpp
index 43ae4e4..f582b75 100644
--- a/core/fpdfapi/parser/cpdf_array.cpp
+++ b/core/fpdfapi/parser/cpdf_array.cpp
@@ -38,10 +38,6 @@
   return kArray;
 }
 
-bool CPDF_Array::IsArray() const {
-  return true;
-}
-
 CPDF_Array* CPDF_Array::AsMutableArray() {
   return this;
 }
diff --git a/core/fpdfapi/parser/cpdf_array.h b/core/fpdfapi/parser/cpdf_array.h
index 9d48b61..c3ce2a1 100644
--- a/core/fpdfapi/parser/cpdf_array.h
+++ b/core/fpdfapi/parser/cpdf_array.h
@@ -33,7 +33,6 @@
   // CPDF_Object:
   Type GetType() const override;
   RetainPtr<CPDF_Object> Clone() const override;
-  bool IsArray() const override;
   CPDF_Array* AsMutableArray() override;
   bool WriteTo(IFX_ArchiveStream* archive,
                const CPDF_Encryptor* encryptor) const override;
diff --git a/core/fpdfapi/parser/cpdf_boolean.cpp b/core/fpdfapi/parser/cpdf_boolean.cpp
index 64a8de8..694f868 100644
--- a/core/fpdfapi/parser/cpdf_boolean.cpp
+++ b/core/fpdfapi/parser/cpdf_boolean.cpp
@@ -34,10 +34,6 @@
   m_bValue = (str == "true");
 }
 
-bool CPDF_Boolean::IsBoolean() const {
-  return true;
-}
-
 CPDF_Boolean* CPDF_Boolean::AsMutableBoolean() {
   return this;
 }
diff --git a/core/fpdfapi/parser/cpdf_boolean.h b/core/fpdfapi/parser/cpdf_boolean.h
index 21c078d..8072749 100644
--- a/core/fpdfapi/parser/cpdf_boolean.h
+++ b/core/fpdfapi/parser/cpdf_boolean.h
@@ -21,7 +21,6 @@
   ByteString GetString() const override;
   int GetInteger() const override;
   void SetString(const ByteString& str) override;
-  bool IsBoolean() const override;
   CPDF_Boolean* AsMutableBoolean() override;
   bool WriteTo(IFX_ArchiveStream* archive,
                const CPDF_Encryptor* encryptor) const override;
diff --git a/core/fpdfapi/parser/cpdf_dictionary.cpp b/core/fpdfapi/parser/cpdf_dictionary.cpp
index 1dfbf1d..8afff3b 100644
--- a/core/fpdfapi/parser/cpdf_dictionary.cpp
+++ b/core/fpdfapi/parser/cpdf_dictionary.cpp
@@ -46,10 +46,6 @@
   return this;
 }
 
-bool CPDF_Dictionary::IsDictionary() const {
-  return true;
-}
-
 CPDF_Dictionary* CPDF_Dictionary::AsMutableDictionary() {
   return this;
 }
diff --git a/core/fpdfapi/parser/cpdf_dictionary.h b/core/fpdfapi/parser/cpdf_dictionary.h
index 788f0b7..77d9e37 100644
--- a/core/fpdfapi/parser/cpdf_dictionary.h
+++ b/core/fpdfapi/parser/cpdf_dictionary.h
@@ -36,7 +36,6 @@
   Type GetType() const override;
   RetainPtr<CPDF_Object> Clone() const override;
   const CPDF_Dictionary* GetDict() const override;
-  bool IsDictionary() const override;
   CPDF_Dictionary* AsMutableDictionary() override;
   bool WriteTo(IFX_ArchiveStream* archive,
                const CPDF_Encryptor* encryptor) const override;
diff --git a/core/fpdfapi/parser/cpdf_name.cpp b/core/fpdfapi/parser/cpdf_name.cpp
index adca78e..670127d 100644
--- a/core/fpdfapi/parser/cpdf_name.cpp
+++ b/core/fpdfapi/parser/cpdf_name.cpp
@@ -34,10 +34,6 @@
   m_Name = str;
 }
 
-bool CPDF_Name::IsName() const {
-  return true;
-}
-
 CPDF_Name* CPDF_Name::AsMutableName() {
   return this;
 }
diff --git a/core/fpdfapi/parser/cpdf_name.h b/core/fpdfapi/parser/cpdf_name.h
index ee9c9b9..8379db6 100644
--- a/core/fpdfapi/parser/cpdf_name.h
+++ b/core/fpdfapi/parser/cpdf_name.h
@@ -22,7 +22,6 @@
   ByteString GetString() const override;
   WideString GetUnicodeText() const override;
   void SetString(const ByteString& str) override;
-  bool IsName() const override;
   CPDF_Name* AsMutableName() override;
   bool WriteTo(IFX_ArchiveStream* archive,
                const CPDF_Encryptor* encryptor) const override;
diff --git a/core/fpdfapi/parser/cpdf_null.cpp b/core/fpdfapi/parser/cpdf_null.cpp
index 4ec970f..a47c529 100644
--- a/core/fpdfapi/parser/cpdf_null.cpp
+++ b/core/fpdfapi/parser/cpdf_null.cpp
@@ -18,11 +18,11 @@
   return pdfium::MakeRetain<CPDF_Null>();
 }
 
+CPDF_Null* CPDF_Null::AsMutableNull() {
+  return this;
+}
+
 bool CPDF_Null::WriteTo(IFX_ArchiveStream* archive,
                         const CPDF_Encryptor* encryptor) const {
   return archive->WriteString(" null");
 }
-
-bool CPDF_Null::IsNull() const {
-  return true;
-}
diff --git a/core/fpdfapi/parser/cpdf_null.h b/core/fpdfapi/parser/cpdf_null.h
index 43be998..74e3c98 100644
--- a/core/fpdfapi/parser/cpdf_null.h
+++ b/core/fpdfapi/parser/cpdf_null.h
@@ -17,9 +17,9 @@
   // CPDF_Object.
   Type GetType() const override;
   RetainPtr<CPDF_Object> Clone() const override;
+  CPDF_Null* AsMutableNull() override;
   bool WriteTo(IFX_ArchiveStream* archive,
                const CPDF_Encryptor* encryptor) const override;
-  bool IsNull() const override;
 
  private:
   CPDF_Null();
diff --git a/core/fpdfapi/parser/cpdf_number.cpp b/core/fpdfapi/parser/cpdf_number.cpp
index dfb40bc..a09351a 100644
--- a/core/fpdfapi/parser/cpdf_number.cpp
+++ b/core/fpdfapi/parser/cpdf_number.cpp
@@ -36,10 +36,6 @@
   return m_Number.GetSigned();
 }
 
-bool CPDF_Number::IsNumber() const {
-  return true;
-}
-
 CPDF_Number* CPDF_Number::AsMutableNumber() {
   return this;
 }
diff --git a/core/fpdfapi/parser/cpdf_number.h b/core/fpdfapi/parser/cpdf_number.h
index 39a2a2c..c8130e2 100644
--- a/core/fpdfapi/parser/cpdf_number.h
+++ b/core/fpdfapi/parser/cpdf_number.h
@@ -23,7 +23,6 @@
   float GetNumber() const override;
   int GetInteger() const override;
   void SetString(const ByteString& str) override;
-  bool IsNumber() const override;
   CPDF_Number* AsMutableNumber() override;
   bool WriteTo(IFX_ArchiveStream* archive,
                const CPDF_Encryptor* encryptor) const override;
diff --git a/core/fpdfapi/parser/cpdf_object.cpp b/core/fpdfapi/parser/cpdf_object.cpp
index c5fff72..92fd602 100644
--- a/core/fpdfapi/parser/cpdf_object.cpp
+++ b/core/fpdfapi/parser/cpdf_object.cpp
@@ -83,42 +83,6 @@
   NOTREACHED();
 }
 
-bool CPDF_Object::IsArray() const {
-  return false;
-}
-
-bool CPDF_Object::IsBoolean() const {
-  return false;
-}
-
-bool CPDF_Object::IsDictionary() const {
-  return false;
-}
-
-bool CPDF_Object::IsName() const {
-  return false;
-}
-
-bool CPDF_Object::IsNumber() const {
-  return false;
-}
-
-bool CPDF_Object::IsReference() const {
-  return false;
-}
-
-bool CPDF_Object::IsStream() const {
-  return false;
-}
-
-bool CPDF_Object::IsString() const {
-  return false;
-}
-
-bool CPDF_Object::IsNull() const {
-  return false;
-}
-
 CPDF_Array* CPDF_Object::AsMutableArray() {
   return nullptr;
 }
@@ -151,6 +115,14 @@
   return const_cast<CPDF_Object*>(this)->AsMutableName();
 }
 
+CPDF_Null* CPDF_Object::AsMutableNull() {
+  return nullptr;
+}
+
+const CPDF_Null* CPDF_Object::AsNull() const {
+  return const_cast<CPDF_Object*>(this)->AsMutableNull();
+}
+
 CPDF_Number* CPDF_Object::AsMutableNumber() {
   return nullptr;
 }
diff --git a/core/fpdfapi/parser/cpdf_object.h b/core/fpdfapi/parser/cpdf_object.h
index 8a4e6db..86d7f54 100644
--- a/core/fpdfapi/parser/cpdf_object.h
+++ b/core/fpdfapi/parser/cpdf_object.h
@@ -21,6 +21,7 @@
 class CPDF_Encryptor;
 class CPDF_IndirectObjectHolder;
 class CPDF_Name;
+class CPDF_Null;
 class CPDF_Number;
 class CPDF_Reference;
 class CPDF_Stream;
@@ -67,20 +68,11 @@
 
   virtual void SetString(const ByteString& str);
 
-  virtual bool IsArray() const;
-  virtual bool IsBoolean() const;
-  virtual bool IsDictionary() const;
-  virtual bool IsName() const;
-  virtual bool IsNumber() const;
-  virtual bool IsReference() const;
-  virtual bool IsStream() const;
-  virtual bool IsString() const;
-  virtual bool IsNull() const;
-
   virtual CPDF_Array* AsMutableArray();
   virtual CPDF_Boolean* AsMutableBoolean();
   virtual CPDF_Dictionary* AsMutableDictionary();
   virtual CPDF_Name* AsMutableName();
+  virtual CPDF_Null* AsMutableNull();
   virtual CPDF_Number* AsMutableNumber();
   virtual CPDF_Reference* AsMutableReference();
   virtual CPDF_Stream* AsMutableStream();
@@ -107,16 +99,28 @@
   RetainPtr<CPDF_Object> GetMutableDirect();    // Wraps virtual method.
   RetainPtr<CPDF_Dictionary> GetMutableDict();  // Wraps virtual method.
 
-  // Const methods wrapping non-const virtual methods.
+  // Const methods wrapping non-const virtual As*() methods.
   const CPDF_Array* AsArray() const;
   const CPDF_Boolean* AsBoolean() const;
   const CPDF_Dictionary* AsDictionary() const;
   const CPDF_Name* AsName() const;
+  const CPDF_Null* AsNull() const;
   const CPDF_Number* AsNumber() const;
   const CPDF_Reference* AsReference() const;
   const CPDF_Stream* AsStream() const;
   const CPDF_String* AsString() const;
 
+  // Type-testing methods merely wrap As*() methods.
+  bool IsArray() const { return !!AsArray(); }
+  bool IsBoolean() const { return !!AsBoolean(); }
+  bool IsDictionary() const { return !!AsDictionary(); }
+  bool IsName() const { return !!AsName(); }
+  bool IsNull() const { return !!AsNull(); }
+  bool IsNumber() const { return !!AsNumber(); }
+  bool IsReference() const { return !!AsReference(); }
+  bool IsStream() const { return !!AsStream(); }
+  bool IsString() const { return !!AsString(); }
+
  protected:
   CPDF_Object() = default;
   CPDF_Object(const CPDF_Object& src) = delete;
diff --git a/core/fpdfapi/parser/cpdf_reference.cpp b/core/fpdfapi/parser/cpdf_reference.cpp
index 6bcc47d..59e11b0 100644
--- a/core/fpdfapi/parser/cpdf_reference.cpp
+++ b/core/fpdfapi/parser/cpdf_reference.cpp
@@ -40,10 +40,6 @@
   return obj ? obj->GetDict() : nullptr;
 }
 
-bool CPDF_Reference::IsReference() const {
-  return true;
-}
-
 CPDF_Reference* CPDF_Reference::AsMutableReference() {
   return this;
 }
diff --git a/core/fpdfapi/parser/cpdf_reference.h b/core/fpdfapi/parser/cpdf_reference.h
index 6ea565d..6a22fec 100644
--- a/core/fpdfapi/parser/cpdf_reference.h
+++ b/core/fpdfapi/parser/cpdf_reference.h
@@ -27,7 +27,6 @@
   float GetNumber() const override;
   int GetInteger() const override;
   const CPDF_Dictionary* GetDict() const override;
-  bool IsReference() const override;
   CPDF_Reference* AsMutableReference() override;
   bool WriteTo(IFX_ArchiveStream* archive,
                const CPDF_Encryptor* encryptor) const override;
diff --git a/core/fpdfapi/parser/cpdf_stream.cpp b/core/fpdfapi/parser/cpdf_stream.cpp
index 4865c1e..6e9d913 100644
--- a/core/fpdfapi/parser/cpdf_stream.cpp
+++ b/core/fpdfapi/parser/cpdf_stream.cpp
@@ -71,10 +71,6 @@
   return m_pDict.Get();
 }
 
-bool CPDF_Stream::IsStream() const {
-  return true;
-}
-
 CPDF_Stream* CPDF_Stream::AsMutableStream() {
   return this;
 }
diff --git a/core/fpdfapi/parser/cpdf_stream.h b/core/fpdfapi/parser/cpdf_stream.h
index 76775bd..3e31191 100644
--- a/core/fpdfapi/parser/cpdf_stream.h
+++ b/core/fpdfapi/parser/cpdf_stream.h
@@ -30,7 +30,6 @@
   RetainPtr<CPDF_Object> Clone() const override;
   const CPDF_Dictionary* GetDict() const override;
   WideString GetUnicodeText() const override;
-  bool IsStream() const override;
   CPDF_Stream* AsMutableStream() override;
   bool WriteTo(IFX_ArchiveStream* archive,
                const CPDF_Encryptor* encryptor) const override;
diff --git a/core/fpdfapi/parser/cpdf_string.cpp b/core/fpdfapi/parser/cpdf_string.cpp
index d2ee985..ccaaec7 100644
--- a/core/fpdfapi/parser/cpdf_string.cpp
+++ b/core/fpdfapi/parser/cpdf_string.cpp
@@ -52,10 +52,6 @@
   m_String = str;
 }
 
-bool CPDF_String::IsString() const {
-  return true;
-}
-
 CPDF_String* CPDF_String::AsMutableString() {
   return this;
 }
diff --git a/core/fpdfapi/parser/cpdf_string.h b/core/fpdfapi/parser/cpdf_string.h
index f1f4f7e..f7bfd38 100644
--- a/core/fpdfapi/parser/cpdf_string.h
+++ b/core/fpdfapi/parser/cpdf_string.h
@@ -23,7 +23,6 @@
   ByteString GetString() const override;
   WideString GetUnicodeText() const override;
   void SetString(const ByteString& str) override;
-  bool IsString() const override;
   CPDF_String* AsMutableString() override;
   bool WriteTo(IFX_ArchiveStream* archive,
                const CPDF_Encryptor* encryptor) const override;
