diff --git a/snapshot/crashpad_types/crashpad_info_reader_test.cc b/snapshot/crashpad_types/crashpad_info_reader_test.cc
index ebc6a4d..556ead1 100644
--- a/snapshot/crashpad_types/crashpad_info_reader_test.cc
+++ b/snapshot/crashpad_types/crashpad_info_reader_test.cc
@@ -30,6 +30,10 @@
 #include "util/misc/from_pointer_cast.h"
 #include "util/process/process_memory_native.h"
 
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+#include "test/linux/fake_ptrace_connection.h"
+#endif
+
 namespace crashpad {
 namespace test {
 namespace {
@@ -102,8 +106,14 @@
                         VMAddress extra_memory_address,
                         VMAddress simple_annotations_address,
                         VMAddress annotations_list_address) {
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+  FakePtraceConnection connection;
+  ASSERT_TRUE(connection.Initialize(process));
+  ProcessMemoryLinux memory(&connection);
+#else
   ProcessMemoryNative memory;
   ASSERT_TRUE(memory.Initialize(process));
+#endif
 
   ProcessMemoryRange range;
   ASSERT_TRUE(range.Initialize(&memory, is_64_bit));
diff --git a/snapshot/crashpad_types/image_annotation_reader_test.cc b/snapshot/crashpad_types/image_annotation_reader_test.cc
index 72a637b..9d9970e 100644
--- a/snapshot/crashpad_types/image_annotation_reader_test.cc
+++ b/snapshot/crashpad_types/image_annotation_reader_test.cc
@@ -32,6 +32,10 @@
 #include "util/misc/from_pointer_cast.h"
 #include "util/process/process_memory_native.h"
 
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+#include "test/linux/fake_ptrace_connection.h"
+#endif
+
 namespace crashpad {
 namespace test {
 namespace {
@@ -90,8 +94,14 @@
                        bool is_64_bit,
                        VMAddress simple_map_address,
                        VMAddress annotation_list_address) {
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+  FakePtraceConnection connection;
+  ASSERT_TRUE(connection.Initialize(process));
+  ProcessMemoryLinux memory(&connection);
+#else
   ProcessMemoryNative memory;
   ASSERT_TRUE(memory.Initialize(process));
+#endif
 
   ProcessMemoryRange range;
   ASSERT_TRUE(range.Initialize(&memory, is_64_bit));
diff --git a/snapshot/elf/elf_image_reader_test.cc b/snapshot/elf/elf_image_reader_test.cc
index 63da92a..2ea55ad 100644
--- a/snapshot/elf/elf_image_reader_test.cc
+++ b/snapshot/elf/elf_image_reader_test.cc
@@ -127,21 +127,22 @@
   constexpr bool am_64_bit = false;
 #endif  // ARCH_CPU_64_BITS
 
-  ProcessMemoryNative memory;
-  ASSERT_TRUE(memory.Initialize(process));
-  ProcessMemoryRange range;
-  ASSERT_TRUE(range.Initialize(&memory, am_64_bit));
-
   VMAddress elf_address;
 #if defined(OS_LINUX) || defined(OS_CHROMEOS) || defined(OS_ANDROID)
   FakePtraceConnection connection;
   ASSERT_TRUE(connection.Initialize(process));
+  ProcessMemoryLinux memory(&connection);
   LocateExecutable(&connection, &memory, &elf_address);
 #elif defined(OS_FUCHSIA)
+  ProcessMemoryFuchsia memory;
+  ASSERT_TRUE(memory.Initialize(process));
   LocateExecutable(process, &memory, &elf_address);
 #endif
   ASSERT_NO_FATAL_FAILURE();
 
+  ProcessMemoryRange range;
+  ASSERT_TRUE(range.Initialize(&memory, am_64_bit));
+
   ElfImageReader reader;
   ASSERT_TRUE(reader.Initialize(range, elf_address));
 
@@ -191,8 +192,15 @@
   constexpr bool am_64_bit = false;
 #endif  // ARCH_CPU_64_BITS
 
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+  FakePtraceConnection connection;
+  ASSERT_TRUE(connection.Initialize(process));
+  ProcessMemoryLinux memory(&connection);
+#else
   ProcessMemoryNative memory;
   ASSERT_TRUE(memory.Initialize(process));
+#endif
+
   ProcessMemoryRange range;
   ASSERT_TRUE(range.Initialize(&memory, am_64_bit));
 
diff --git a/snapshot/linux/debug_rendezvous_test.cc b/snapshot/linux/debug_rendezvous_test.cc
index d32bd19..41956aa 100644
--- a/snapshot/linux/debug_rendezvous_test.cc
+++ b/snapshot/linux/debug_rendezvous_test.cc
@@ -83,8 +83,7 @@
   ASSERT_EQ(exe_mappings->Count(), 1u);
   LinuxVMAddress elf_address = exe_mappings->Next()->range.Base();
 
-  ProcessMemoryLinux memory;
-  ASSERT_TRUE(memory.Initialize(connection->GetProcessID()));
+  ProcessMemoryLinux memory(connection);
   ProcessMemoryRange range;
   ASSERT_TRUE(range.Initialize(&memory, connection->Is64Bit()));
 
diff --git a/snapshot/sanitized/sanitization_information_test.cc b/snapshot/sanitized/sanitization_information_test.cc
index f386442..425ec75 100644
--- a/snapshot/sanitized/sanitization_information_test.cc
+++ b/snapshot/sanitized/sanitization_information_test.cc
@@ -20,6 +20,10 @@
 #include "util/misc/from_pointer_cast.h"
 #include "util/process/process_memory_linux.h"
 
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+#include "test/linux/fake_ptrace_connection.h"
+#endif
+
 namespace crashpad {
 namespace test {
 namespace {
@@ -27,11 +31,12 @@
 class AllowedAnnotationsTest : public testing::Test {
  public:
   void SetUp() override {
-    ASSERT_TRUE(memory_.Initialize(getpid()));
+    ASSERT_TRUE(connection_.Initialize(getpid()));
+
 #if defined(ARCH_CPU_64_BITS)
-    ASSERT_TRUE(range_.Initialize(&memory_, true));
+    ASSERT_TRUE(range_.Initialize(connection_.Memory(), true));
 #else
-    ASSERT_TRUE(range_.Initialize(&memory_, false));
+    ASSERT_TRUE(range_.Initialize(connection_.Memory(), false));
 #endif
   }
 
@@ -41,7 +46,7 @@
         range_, FromPointerCast<VMAddress>(address), &allowed_annotations_);
   }
 
-  ProcessMemoryLinux memory_;
+  FakePtraceConnection connection_;
   ProcessMemoryRange range_;
   std::vector<std::string> allowed_annotations_;
 };
diff --git a/test/linux/fake_ptrace_connection.cc b/test/linux/fake_ptrace_connection.cc
index d556045..774a340 100644
--- a/test/linux/fake_ptrace_connection.cc
+++ b/test/linux/fake_ptrace_connection.cc
@@ -83,12 +83,7 @@
 ProcessMemory* FakePtraceConnection::Memory() {
   INITIALIZATION_STATE_DCHECK_VALID(initialized_);
   if (!memory_) {
-    auto mem = std::make_unique<ProcessMemoryLinux>();
-    if (mem->Initialize(pid_)) {
-      memory_ = std::move(mem);
-    } else {
-      ADD_FAILURE();
-    }
+    memory_ = std::make_unique<ProcessMemoryLinux>(this);
   }
   return memory_.get();
 }
@@ -99,5 +94,12 @@
   return false;
 }
 
+ssize_t FakePtraceConnection::ReadUpTo(VMAddress address,
+                                       size_t size,
+                                       void* buffer) {
+  NOTREACHED();
+  return false;
+}
+
 }  // namespace test
 }  // namespace crashpad
diff --git a/test/linux/fake_ptrace_connection.h b/test/linux/fake_ptrace_connection.h
index 01a6f92..79cdbd9 100644
--- a/test/linux/fake_ptrace_connection.h
+++ b/test/linux/fake_ptrace_connection.h
@@ -65,6 +65,9 @@
   //! \todo Not yet implemented.
   bool Threads(std::vector<pid_t>* threads) override;
 
+  //! \\todo Not yet implemented.
+  ssize_t ReadUpTo(VMAddress address, size_t size, void* buffer) override;
+
  private:
   std::set<pid_t> attachments_;
   std::unique_ptr<ProcessMemoryLinux> memory_;
diff --git a/util/linux/auxiliary_vector_test.cc b/util/linux/auxiliary_vector_test.cc
index 00af5ab..2f6c942 100644
--- a/util/linux/auxiliary_vector_test.cc
+++ b/util/linux/auxiliary_vector_test.cc
@@ -95,8 +95,7 @@
   ASSERT_TRUE(aux.GetValue(AT_EGID, &egid));
   EXPECT_EQ(egid, getegid());
 
-  ProcessMemoryLinux memory;
-  ASSERT_TRUE(memory.Initialize(pid));
+  ProcessMemoryLinux memory(&connection);
 
   LinuxVMAddress platform_addr;
   ASSERT_TRUE(aux.GetValue(AT_PLATFORM, &platform_addr));
diff --git a/util/linux/direct_ptrace_connection.cc b/util/linux/direct_ptrace_connection.cc
index 8b55205..5da0147 100644
--- a/util/linux/direct_ptrace_connection.cc
+++ b/util/linux/direct_ptrace_connection.cc
@@ -39,10 +39,6 @@
   }
   pid_ = pid;
 
-  if (!memory_.Initialize(pid)) {
-    return false;
-  }
-
   INITIALIZATION_STATE_SET_VALID(initialized_);
   return true;
 }
@@ -79,7 +75,10 @@
 
 ProcessMemory* DirectPtraceConnection::Memory() {
   INITIALIZATION_STATE_DCHECK_VALID(initialized_);
-  return &memory_;
+  if (!memory_) {
+    memory_ = std::make_unique<ProcessMemoryLinux>(this);
+  }
+  return memory_.get();
 }
 
 bool DirectPtraceConnection::Threads(std::vector<pid_t>* threads) {
@@ -87,4 +86,10 @@
   return ReadThreadIDs(pid_, threads);
 }
 
+ssize_t DirectPtraceConnection::ReadUpTo(VMAddress address,
+                                         size_t size,
+                                         void* buffer) {
+  return ptracer_.ReadUpTo(pid_, address, size, static_cast<char*>(buffer));
+}
+
 }  // namespace crashpad
diff --git a/util/linux/direct_ptrace_connection.h b/util/linux/direct_ptrace_connection.h
index 10f8370..99ad233 100644
--- a/util/linux/direct_ptrace_connection.h
+++ b/util/linux/direct_ptrace_connection.h
@@ -57,10 +57,11 @@
                         std::string* contents) override;
   ProcessMemory* Memory() override;
   bool Threads(std::vector<pid_t>* threads) override;
+  ssize_t ReadUpTo(VMAddress, size_t size, void* buffer) override;
 
  private:
   std::vector<std::unique_ptr<ScopedPtraceAttach>> attachments_;
-  ProcessMemoryLinux memory_;
+  std::unique_ptr<ProcessMemory> memory_;
   pid_t pid_;
   Ptracer ptracer_;
   InitializationStateDcheck initialized_;
diff --git a/util/linux/ptrace_broker_test.cc b/util/linux/ptrace_broker_test.cc
index 341f2c8..2012df3 100644
--- a/util/linux/ptrace_broker_test.cc
+++ b/util/linux/ptrace_broker_test.cc
@@ -151,8 +151,7 @@
     broker_thread.Start();
 
     PtraceClient client;
-    ASSERT_TRUE(client.Initialize(
-        client_sock.get(), ChildPID(), /* try_direct_memory= */ false));
+    ASSERT_TRUE(client.Initialize(client_sock.get(), ChildPID()));
 
     EXPECT_EQ(client.GetProcessID(), ChildPID());
 
@@ -177,32 +176,26 @@
     ASSERT_TRUE(client.GetThreadInfo(child2_tid, &info2));
     EXPECT_EQ(info2.thread_specific_data_address, child2_tls);
 
-    ProcessMemory* memory = client.Memory();
-    ASSERT_TRUE(memory);
-
-    auto buffer = std::make_unique<char[]>(mapping_.len());
-    ASSERT_TRUE(memory->Read(
-        mapping_.addr_as<VMAddress>(), mapping_.len(), buffer.get()));
     auto expected_buffer = mapping_.addr_as<char*>();
-    for (size_t index = 0; index < mapping_.len(); ++index) {
-      EXPECT_EQ(buffer[index], expected_buffer[index]);
-    }
-
     char first;
-    ASSERT_TRUE(
-        memory->Read(mapping_.addr_as<VMAddress>(), sizeof(first), &first));
+    ASSERT_EQ(
+        client.ReadUpTo(mapping_.addr_as<VMAddress>(), sizeof(first), &first),
+        1);
     EXPECT_EQ(first, expected_buffer[0]);
 
     char last;
-    ASSERT_TRUE(memory->Read(mapping_.addr_as<VMAddress>() + mapping_.len() - 1,
-                             sizeof(last),
-                             &last));
+    ASSERT_EQ(
+        client.ReadUpTo(mapping_.addr_as<VMAddress>() + mapping_.len() - 1,
+                        sizeof(last),
+                        &last),
+        1);
     EXPECT_EQ(last, expected_buffer[mapping_.len() - 1]);
 
     char unmapped;
-    EXPECT_FALSE(memory->Read(mapping_.addr_as<VMAddress>() + mapping_.len(),
+    EXPECT_EQ(client.ReadUpTo(mapping_.addr_as<VMAddress>() + mapping_.len(),
                               sizeof(unmapped),
-                              &unmapped));
+                              &unmapped),
+              -1);
 
     std::string file_root = file_dir.value() + '/';
     broker.SetFileRoot(file_root.c_str());
diff --git a/util/linux/ptrace_client.cc b/util/linux/ptrace_client.cc
index 0e9c821..cb1a1a5 100644
--- a/util/linux/ptrace_client.cc
+++ b/util/linux/ptrace_client.cc
@@ -143,7 +143,7 @@
   }
 }
 
-bool PtraceClient::Initialize(int sock, pid_t pid, bool try_direct_memory) {
+bool PtraceClient::Initialize(int sock, pid_t pid) {
   INITIALIZATION_STATE_SET_INITIALIZING(initialized_);
   sock_ = sock;
   pid_ = pid;
@@ -166,16 +166,6 @@
   }
   is_64_bit_ = is_64_bit == ExceptionHandlerProtocol::kBoolTrue;
 
-  if (try_direct_memory) {
-    auto direct_mem = std::make_unique<ProcessMemoryLinux>();
-    if (direct_mem->Initialize(pid)) {
-      memory_.reset(direct_mem.release());
-    }
-  }
-  if (!memory_) {
-    memory_ = std::make_unique<BrokeredMemory>(this);
-  }
-
   INITIALIZATION_STATE_SET_VALID(initialized_);
   return true;
 }
@@ -260,6 +250,9 @@
 
 ProcessMemory* PtraceClient::Memory() {
   INITIALIZATION_STATE_DCHECK_VALID(initialized_);
+  if (!memory_) {
+    memory_ = std::make_unique<ProcessMemoryLinux>(this);
+  }
   return memory_.get();
 }
 
@@ -308,20 +301,7 @@
   return true;
 }
 
-PtraceClient::BrokeredMemory::BrokeredMemory(PtraceClient* client)
-    : ProcessMemory(), client_(client) {}
-
-PtraceClient::BrokeredMemory::~BrokeredMemory() = default;
-
-ssize_t PtraceClient::BrokeredMemory::ReadUpTo(VMAddress address,
-                                               size_t size,
-                                               void* buffer) const {
-  return client_->ReadUpTo(address, size, buffer);
-}
-
-ssize_t PtraceClient::ReadUpTo(VMAddress address,
-                               size_t size,
-                               void* buffer) const {
+ssize_t PtraceClient::ReadUpTo(VMAddress address, size_t size, void* buffer) {
   INITIALIZATION_STATE_DCHECK_VALID(initialized_);
   char* buffer_c = reinterpret_cast<char*>(buffer);
 
diff --git a/util/linux/ptrace_client.h b/util/linux/ptrace_client.h
index b4f27ae..896a8b4 100644
--- a/util/linux/ptrace_client.h
+++ b/util/linux/ptrace_client.h
@@ -46,11 +46,8 @@
   //!     ownership of the socket.
   //! \param[in] pid The process ID of the process to form a PtraceConnection
   //!     with.
-  //! \param[in] try_direct_memory If `true` the client will attempt to support
-  //!     memory reading operations by directly acessing the target process'
-  //!     /proc/[pid]/mem file.
   //! \return `true` on success. `false` on failure with a message logged.
-  bool Initialize(int sock, pid_t pid, bool try_direct_memory = true);
+  bool Initialize(int sock, pid_t pid);
 
   // PtraceConnection:
 
@@ -62,24 +59,9 @@
                         std::string* contents) override;
   ProcessMemory* Memory() override;
   bool Threads(std::vector<pid_t>* threads) override;
+  ssize_t ReadUpTo(VMAddress address, size_t size, void* buffer) override;
 
  private:
-  class BrokeredMemory : public ProcessMemory {
-   public:
-    explicit BrokeredMemory(PtraceClient* client);
-    ~BrokeredMemory();
-
-    ssize_t ReadUpTo(VMAddress address,
-                     size_t size,
-                     void* buffer) const override;
-
-   private:
-    PtraceClient* client_;
-
-    DISALLOW_COPY_AND_ASSIGN(BrokeredMemory);
-  };
-
-  ssize_t ReadUpTo(VMAddress address, size_t size, void* buffer) const;
   bool SendFilePath(const char* path, size_t length);
 
   std::unique_ptr<ProcessMemory> memory_;
diff --git a/util/linux/ptrace_connection.h b/util/linux/ptrace_connection.h
index 2111747..9b31d52 100644
--- a/util/linux/ptrace_connection.h
+++ b/util/linux/ptrace_connection.h
@@ -73,6 +73,20 @@
   //!     this method returns `false`, \a threads may contain a partial list of
   //!     thread IDs.
   virtual bool Threads(std::vector<pid_t>* threads) = 0;
+
+  //! \brief Copies memory from the connected process into a caller-provided
+  //!     buffer in the current process, up to a maximum number of bytes.
+  //!
+  //! \param[in] address The address, in the connected process' address space,
+  //!     of the memory region to copy.
+  //! \param[in] size The maximum size, in bytes, of the memory region to copy.
+  //!     \a buffer must be at least this size.
+  //! \param[out] buffer The buffer into which the contents of the other
+  //!     process' memory will be copied.
+  //!
+  //! \return the number of bytes copied, 0 if there is no more data to read, or
+  //!     -1 on failure with a message logged.
+  virtual ssize_t ReadUpTo(VMAddress address, size_t size, void* buffer) = 0;
 };
 
 }  // namespace crashpad
diff --git a/util/process/process_memory_linux.cc b/util/process/process_memory_linux.cc
index 1fc3c05..56ac0ec 100644
--- a/util/process/process_memory_linux.cc
+++ b/util/process/process_memory_linux.cc
@@ -27,38 +27,37 @@
 
 namespace crashpad {
 
-ProcessMemoryLinux::ProcessMemoryLinux()
-    : ProcessMemory(), mem_fd_(), pid_(-1), initialized_() {}
+ProcessMemoryLinux::ProcessMemoryLinux(PtraceConnection* connection)
+    : ProcessMemory(), mem_fd_() {
+  char path[32];
+  snprintf(path, sizeof(path), "/proc/%d/mem", connection->GetProcessID());
+  mem_fd_.reset(HANDLE_EINTR(open(path, O_RDONLY | O_NOCTTY | O_CLOEXEC)));
+  if (mem_fd_.is_valid()) {
+    read_up_to_ = [this](VMAddress address, size_t size, void* buffer) {
+      ssize_t bytes_read =
+          HANDLE_EINTR(pread64(mem_fd_.get(), buffer, size, address));
+      if (bytes_read < 0) {
+        PLOG(ERROR) << "pread64";
+      }
+      return bytes_read;
+    };
+    return;
+  }
+
+  read_up_to_ = std::bind(&PtraceConnection::ReadUpTo,
+                          connection,
+                          std::placeholders::_1,
+                          std::placeholders::_2,
+                          std::placeholders::_3);
+}
 
 ProcessMemoryLinux::~ProcessMemoryLinux() {}
 
-bool ProcessMemoryLinux::Initialize(pid_t pid) {
-  INITIALIZATION_STATE_SET_INITIALIZING(initialized_);
-  pid_ = pid;
-  char path[32];
-  snprintf(path, sizeof(path), "/proc/%d/mem", pid_);
-  mem_fd_.reset(HANDLE_EINTR(open(path, O_RDONLY | O_NOCTTY | O_CLOEXEC)));
-  if (!mem_fd_.is_valid()) {
-    PLOG(ERROR) << "open";
-    return false;
-  }
-  INITIALIZATION_STATE_SET_VALID(initialized_);
-  return true;
-}
-
 ssize_t ProcessMemoryLinux::ReadUpTo(VMAddress address,
                                      size_t size,
                                      void* buffer) const {
-  INITIALIZATION_STATE_DCHECK_VALID(initialized_);
-  DCHECK(mem_fd_.is_valid());
   DCHECK_LE(size, size_t{std::numeric_limits<ssize_t>::max()});
-
-  ssize_t bytes_read =
-      HANDLE_EINTR(pread64(mem_fd_.get(), buffer, size, address));
-  if (bytes_read < 0) {
-    PLOG(ERROR) << "pread64";
-  }
-  return bytes_read;
+  return read_up_to_(address, size, buffer);
 }
 
 }  // namespace crashpad
diff --git a/util/process/process_memory_linux.h b/util/process/process_memory_linux.h
index 4fe008b..1150f14 100644
--- a/util/process/process_memory_linux.h
+++ b/util/process/process_memory_linux.h
@@ -17,12 +17,13 @@
 
 #include <sys/types.h>
 
+#include <functional>
 #include <string>
 
 #include "base/files/scoped_file.h"
 #include "base/macros.h"
+#include "util/linux/ptrace_connection.h"
 #include "util/misc/address_types.h"
-#include "util/misc/initialization_state_dcheck.h"
 #include "util/process/process_memory.h"
 
 namespace crashpad {
@@ -30,26 +31,14 @@
 //! \brief Accesses the memory of another Linux process.
 class ProcessMemoryLinux final : public ProcessMemory {
  public:
-  ProcessMemoryLinux();
+  explicit ProcessMemoryLinux(PtraceConnection* connection);
   ~ProcessMemoryLinux();
 
-  //! \brief Initializes this object to read the memory of a process whose ID
-  //!     is \a pid.
-  //!
-  //! This method must be called successfully prior to calling any other method
-  //! in this class.
-  //!
-  //! \param[in] pid The process ID of a target process.
-  //!
-  //! \return `true` on success, `false` on failure with a message logged.
-  bool Initialize(pid_t pid);
-
  private:
   ssize_t ReadUpTo(VMAddress address, size_t size, void* buffer) const override;
 
+  std::function<ssize_t(VMAddress, size_t, void*)> read_up_to_;
   base::ScopedFD mem_fd_;
-  pid_t pid_;
-  InitializationStateDcheck initialized_;
 
   DISALLOW_COPY_AND_ASSIGN(ProcessMemoryLinux);
 };
diff --git a/util/process/process_memory_range_test.cc b/util/process/process_memory_range_test.cc
index a5c7afb..2e34665 100644
--- a/util/process/process_memory_range_test.cc
+++ b/util/process/process_memory_range_test.cc
@@ -23,6 +23,10 @@
 #include "util/misc/from_pointer_cast.h"
 #include "util/process/process_memory_native.h"
 
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+#include "test/linux/fake_ptrace_connection.h"
+#endif
+
 namespace crashpad {
 namespace test {
 namespace {
@@ -39,8 +43,14 @@
   constexpr bool is_64_bit = false;
 #endif  // ARCH_CPU_64_BITS
 
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+  FakePtraceConnection connection;
+  ASSERT_TRUE(connection.Initialize(GetSelfProcess()));
+  ProcessMemoryLinux memory(&connection);
+#else
   ProcessMemoryNative memory;
   ASSERT_TRUE(memory.Initialize(GetSelfProcess()));
+#endif  // OS_ANDROID || OS_LINUX || OS_CHROMEOS
 
   ProcessMemoryRange range;
   ASSERT_TRUE(range.Initialize(&memory, is_64_bit));
diff --git a/util/process/process_memory_sanitized_test.cc b/util/process/process_memory_sanitized_test.cc
index 1a7f9c9..b88eab1 100644
--- a/util/process/process_memory_sanitized_test.cc
+++ b/util/process/process_memory_sanitized_test.cc
@@ -19,13 +19,23 @@
 #include "util/misc/from_pointer_cast.h"
 #include "util/process/process_memory_native.h"
 
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+#include "test/linux/fake_ptrace_connection.h"
+#endif
+
 namespace crashpad {
 namespace test {
 namespace {
 
 TEST(ProcessMemorySanitized, DenyDisallowedMemory) {
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+  FakePtraceConnection connection;
+  ASSERT_TRUE(connection.Initialize(GetSelfProcess()));
+  ProcessMemoryLinux memory(&connection);
+#else
   ProcessMemoryNative memory;
   ASSERT_TRUE(memory.Initialize(GetSelfProcess()));
+#endif  // OS_ANDROID || OS_LINUX || OS_CHROMEOS
 
   char c = 42;
   char out;
@@ -41,8 +51,14 @@
 }
 
 TEST(ProcessMemorySanitized, AllowedMemory) {
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+  FakePtraceConnection connection;
+  ASSERT_TRUE(connection.Initialize(GetSelfProcess()));
+  ProcessMemoryLinux memory(&connection);
+#else
   ProcessMemoryNative memory;
   ASSERT_TRUE(memory.Initialize(GetSelfProcess()));
+#endif  // OS_ANDROID || OS_LINUX || OS_CHROMEOS
 
   char str[4] = "ABC";
   char out[4];
diff --git a/util/process/process_memory_test.cc b/util/process/process_memory_test.cc
index 7faa400..6857b04 100644
--- a/util/process/process_memory_test.cc
+++ b/util/process/process_memory_test.cc
@@ -34,6 +34,11 @@
 #include "test/mac/mach_multiprocess.h"
 #endif  // defined(OS_APPLE)
 
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+#include "test/linux/fake_ptrace_connection.h"
+#include "util/linux/direct_ptrace_connection.h"
+#endif  // OS_ANDROID || OS_LINUX || OS_CHROMEOS
+
 namespace crashpad {
 namespace test {
 namespace {
@@ -148,8 +153,14 @@
   }
 
   void DoTest(ProcessType process, size_t region_size, VMAddress address) {
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+    FakePtraceConnection connection;
+    ASSERT_TRUE(connection.Initialize(process));
+    ProcessMemoryLinux memory(&connection);
+#else
     ProcessMemoryNative memory;
     ASSERT_TRUE(memory.Initialize(process));
+#endif  // OS_ANDROID || OS_LINUX || OS_CHROMEOS
 
     std::unique_ptr<char[]> result(new char[region_size]);
 
@@ -328,8 +339,14 @@
               VMAddress local_empty_address,
               VMAddress local_short_address,
               VMAddress long_string_address) {
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+    FakePtraceConnection connection;
+    ASSERT_TRUE(connection.Initialize(process));
+    ProcessMemoryLinux memory(&connection);
+#else
     ProcessMemoryNative memory;
     ASSERT_TRUE(memory.Initialize(process));
+#endif  // OS_ANDROID || OS_LINUX || OS_CHROMEOS
 
     Compare(memory, const_empty_address, kConstCharEmpty);
     Compare(memory, const_short_address, kConstCharShort);
@@ -399,8 +416,14 @@
   }
 
   void DoTest(ProcessType process, VMAddress address) {
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+    DirectPtraceConnection connection;
+    ASSERT_TRUE(connection.Initialize(process));
+    ProcessMemoryLinux memory(&connection);
+#else
     ProcessMemoryNative memory;
     ASSERT_TRUE(memory.Initialize(process));
+#endif  // OS_ANDROID || OS_LINUX || OS_CHROMEOS
 
     VMAddress page_addr1 = address;
     VMAddress page_addr2 = page_addr1 + base::GetPageSize();
@@ -525,8 +548,14 @@
 
   void DoTest(ProcessType process,
               const std::vector<StringDataInChildProcess>& strings) {
+#if defined(OS_ANDROID) || defined(OS_LINUX) || defined(OS_CHROMEOS)
+    DirectPtraceConnection connection;
+    ASSERT_TRUE(connection.Initialize(process));
+    ProcessMemoryLinux memory(&connection);
+#else
     ProcessMemoryNative memory;
     ASSERT_TRUE(memory.Initialize(process));
+#endif  // OS_ANDROID || OS_LINUX || OS_CHROMEOS
 
     std::string result;
     result.reserve(kChildProcessStringLength + 1);
