diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index 418af60..72b7229 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -15,6 +15,10 @@
   import("//build/config/android/rules.gni")
 }
 
+config("rtc_base_chromium_config") {
+  defines = [ "NO_MAIN_THREAD_WRAPPING" ]
+}
+
 config("rtc_base_all_dependent_config") {
   if (is_ios) {
     libs = [
@@ -899,6 +903,7 @@
 
   if (build_with_chromium) {
     include_dirs = [ "../../boringssl/src/include" ]
+    public_configs += [ ":rtc_base_chromium_config" ]
   } else {
     sources += [
       "callback.h",
diff --git a/rtc_base/message_queue_unittest.cc b/rtc_base/message_queue_unittest.cc
index b31ea6c..b7c32e3 100644
--- a/rtc_base/message_queue_unittest.cc
+++ b/rtc_base/message_queue_unittest.cc
@@ -121,6 +121,20 @@
   EXPECT_TRUE(deleted);
 }
 
+struct UnwrapMainThreadScope {
+  UnwrapMainThreadScope() : rewrap_(Thread::Current() != nullptr) {
+    if (rewrap_)
+      ThreadManager::Instance()->UnwrapCurrentThread();
+  }
+  ~UnwrapMainThreadScope() {
+    if (rewrap_)
+      ThreadManager::Instance()->WrapCurrentThread();
+  }
+
+ private:
+  bool rewrap_;
+};
+
 // Ensure that ProcessAllMessageQueues does its essential function; process
 // all messages (both delayed and non delayed) up until the current time, on
 // all registered message queues.
diff --git a/rtc_base/thread.cc b/rtc_base/thread.cc
index 0caa856..be0d15d 100644
--- a/rtc_base/thread.cc
+++ b/rtc_base/thread.cc
@@ -78,11 +78,19 @@
   ThreadManager* manager = ThreadManager::Instance();
   Thread* thread = manager->CurrentThread();
 
+#ifndef NO_MAIN_THREAD_WRAPPING
+  // Only autowrap the thread which instantiated the ThreadManager.
+  if (!thread && manager->IsMainThread()) {
+    thread = new Thread(SocketServer::CreateDefault());
+    thread->WrapCurrentWithThreadManager(manager, true);
+  }
+#endif
+
   return thread;
 }
 
 #if defined(WEBRTC_POSIX)
-ThreadManager::ThreadManager() {
+ThreadManager::ThreadManager() : main_thread_ref_(CurrentThreadRef()) {
 #if defined(WEBRTC_MAC)
   InitCocoaMultiThreading();
 #endif
@@ -104,7 +112,8 @@
 #endif
 
 #if defined(WEBRTC_WIN)
-ThreadManager::ThreadManager() : key_(TlsAlloc()) {}
+ThreadManager::ThreadManager()
+    : key_(TlsAlloc()), main_thread_ref_(CurrentThreadRef()) {}
 
 Thread* ThreadManager::CurrentThread() {
   return static_cast<Thread*>(TlsGetValue(key_));
@@ -133,6 +142,10 @@
   }
 }
 
+bool ThreadManager::IsMainThread() {
+  return IsThreadRefEqual(CurrentThreadRef(), main_thread_ref_);
+}
+
 Thread::ScopedDisallowBlockingCalls::ScopedDisallowBlockingCalls()
     : thread_(Thread::Current()),
       previous_state_(thread_->SetAllowBlockingCalls(false)) {}
@@ -561,11 +574,8 @@
 
 AutoThread::AutoThread()
     : Thread(SocketServer::CreateDefault(), /*do_init=*/false) {
+  DoInit();
   if (!ThreadManager::Instance()->CurrentThread()) {
-    // DoInit registers with MessageQueueManager. Do that only if we intend to
-    // be rtc::Thread::Current(), otherwise ProcessAllMessageQueuesInternal will
-    // post a message to a queue that no running thread is serving.
-    DoInit();
     ThreadManager::Instance()->SetCurrentThread(this);
   }
 }
diff --git a/rtc_base/thread.h b/rtc_base/thread.h
index 6b5bdf4..2b4d020 100644
--- a/rtc_base/thread.h
+++ b/rtc_base/thread.h
@@ -102,6 +102,8 @@
   Thread* WrapCurrentThread();
   void UnwrapCurrentThread();
 
+  bool IsMainThread();
+
  private:
   ThreadManager();
   ~ThreadManager();
@@ -114,6 +116,9 @@
   const DWORD key_;
 #endif
 
+  // The thread to potentially autowrap.
+  const PlatformThreadRef main_thread_ref_;
+
   RTC_DISALLOW_COPY_AND_ASSIGN(ThreadManager);
 };
 
diff --git a/rtc_base/thread_unittest.cc b/rtc_base/thread_unittest.cc
index 55a0e2d..c4b6143 100644
--- a/rtc_base/thread_unittest.cc
+++ b/rtc_base/thread_unittest.cc
@@ -267,18 +267,15 @@
 
 TEST(ThreadTest, Wrap) {
   Thread* current_thread = Thread::Current();
-  ThreadManager::Instance()->SetCurrentThread(nullptr);
-
-  {
-    CustomThread cthread;
-    EXPECT_TRUE(cthread.WrapCurrent());
-    EXPECT_EQ(&cthread, Thread::Current());
-    EXPECT_TRUE(cthread.RunningForTest());
-    EXPECT_FALSE(cthread.IsOwned());
-    cthread.UnwrapCurrent();
-    EXPECT_FALSE(cthread.RunningForTest());
-  }
-  ThreadManager::Instance()->SetCurrentThread(current_thread);
+  current_thread->UnwrapCurrent();
+  CustomThread* cthread = new CustomThread();
+  EXPECT_TRUE(cthread->WrapCurrent());
+  EXPECT_TRUE(cthread->RunningForTest());
+  EXPECT_FALSE(cthread->IsOwned());
+  cthread->UnwrapCurrent();
+  EXPECT_FALSE(cthread->RunningForTest());
+  delete cthread;
+  current_thread->WrapCurrent();
 }
 
 TEST(ThreadTest, Invoke) {
diff --git a/rtc_base/unittest_main.cc b/rtc_base/unittest_main.cc
index 8cc1e96..fe3e9e4 100644
--- a/rtc_base/unittest_main.cc
+++ b/rtc_base/unittest_main.cc
@@ -18,7 +18,6 @@
 #include "rtc_base/logging.h"
 #include "rtc_base/ssl_adapter.h"
 #include "rtc_base/ssl_stream_adapter.h"
-#include "rtc_base/thread.h"
 #include "system_wrappers/include/field_trial.h"
 #include "system_wrappers/include/metrics.h"
 #include "test/field_trial.h"
@@ -124,8 +123,6 @@
   rtc::test::InitTestSuite(RUN_ALL_TESTS, argc, argv, false);
   rtc::test::RunTestsFromIOSApp();
 #endif
-
-  rtc::AutoThread main_thread;
   const int res = RUN_ALL_TESTS();
 
   rtc::CleanupSSL();
diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index c694ec6..4cd3783 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -1118,7 +1118,6 @@
             ":peerconnectionfactory_base_objc",
             ":sdk_unittests_bundle_data",
             ":sdk_unittests_sources",
-            "../rtc_base",
             "//test:test_support",
           ]
           ldflags = [ "-all_load" ]
@@ -1137,7 +1136,6 @@
           deps = [
             ":framework_objc+link",
             ":ios_framework_bundle",
-            "../rtc_base",
             "//test:test_support",
           ]
         }
diff --git a/sdk/objc/unittests/main.mm b/sdk/objc/unittests/main.mm
index 9c51376..77a88a6 100644
--- a/sdk/objc/unittests/main.mm
+++ b/sdk/objc/unittests/main.mm
@@ -10,14 +10,11 @@
 
 #import <Foundation/Foundation.h>
 #import <UIKit/UIKit.h>
-#include "rtc_base/thread.h"
 #include "test/ios/coverage_util_ios.h"
 
 int main(int argc, char* argv[]) {
   rtc::test::ConfigureCoverageReportPath();
 
-  rtc::AutoThread main_thread;
-
   @autoreleasepool {
     return UIApplicationMain(argc, argv, nil, nil);
   }
diff --git a/test/BUILD.gn b/test/BUILD.gn
index ee3c57c..d4706b8 100644
--- a/test/BUILD.gn
+++ b/test/BUILD.gn
@@ -181,7 +181,6 @@
     ]
     deps = [
       ":perf_test",
-      "../rtc_base",
       "../sdk:helpers_objc",
     ]
     configs += [ ":test_support_objc_config" ]
diff --git a/test/ios/test_support.mm b/test/ios/test_support.mm
index d034bfe..8600597 100644
--- a/test/ios/test_support.mm
+++ b/test/ios/test_support.mm
@@ -10,7 +10,6 @@
 
 #import <UIKit/UIKit.h>
 
-#include "rtc_base/thread.h"
 #include "test/ios/coverage_util_ios.h"
 #include "test/ios/test_support.h"
 #include "test/testsupport/perf_test.h"
@@ -74,8 +73,6 @@
 - (void)runTests {
   rtc::test::ConfigureCoverageReportPath();
 
-  rtc::AutoThread main_thread;
-
   int exitStatus = g_test_suite();
 
   if (g_save_chartjson_result) {
