Don't use raw_ptr for GCed types

Change-Id: I087b88e0694b5f2b7a9811a8a130ded5b679e323
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/122810
Commit-Queue: Tom Sepez <tsepez@google.com>
Commit-Queue: Lei Zhang <thestig@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Tom Sepez <tsepez@google.com>
diff --git a/xfa/fxfa/parser/cxfa_nodeiteratortemplate.h b/xfa/fxfa/parser/cxfa_nodeiteratortemplate.h
index de8512a..95b0efa 100644
--- a/xfa/fxfa/parser/cxfa_nodeiteratortemplate.h
+++ b/xfa/fxfa/parser/cxfa_nodeiteratortemplate.h
@@ -7,12 +7,17 @@
 #ifndef XFA_FXFA_PARSER_CXFA_NODEITERATORTEMPLATE_H_
 #define XFA_FXFA_PARSER_CXFA_NODEITERATORTEMPLATE_H_
 
+#include <type_traits>
 #include "core/fxcrt/unowned_ptr.h"
 #include "v8/include/cppgc/macros.h"
+#include "v8/include/cppgc/type-traits.h"
 
 template <class NodeType,
           class TraverseStrategy,
-          typename HolderType = UnownedPtr<NodeType>>
+          typename HolderType = std::conditional_t<
+              cppgc::IsGarbageCollectedOrMixinTypeV<NodeType>,
+              NodeType*,
+              UnownedPtr<NodeType>>>
 class CXFA_NodeIteratorTemplate {
   CPPGC_STACK_ALLOCATED();  // Allows Raw/Unowned |HolderType|.