diff --git a/tests/MessageBusTest.cpp b/tests/MessageBusTest.cpp
index 163addf..145176b 100644
--- a/tests/MessageBusTest.cpp
+++ b/tests/MessageBusTest.cpp
@@ -8,10 +8,15 @@
 #include "SkMessageBus.h"
 #include "Test.h"
 
+namespace {
 struct TestMessage {
+    bool shouldSend(uint32_t inboxID) const { return true; }
+    TestMessage(int i, float f) : x(i), y(f) {}
+
     int x;
     float y;
 };
+}
 DECLARE_SKMESSAGEBUS_MESSAGE(TestMessage)
 
 DEF_TEST(MessageBus, r) {
@@ -50,4 +55,42 @@
     REPORTER_ASSERT(r, 1 == messages[2].x);
 }
 
+namespace {
+struct AddressedMessage {
+    uint32_t fInboxID;
+
+    bool shouldSend(uint32_t inboxID) const {
+        SkASSERT(inboxID);
+        if (!fInboxID) {
+            return true;
+        }
+        return inboxID == fInboxID;
+    }
+};
+}
+DECLARE_SKMESSAGEBUS_MESSAGE(AddressedMessage)
+
+DEF_TEST(MessageBus_shouldSend, r) {
+    SkMessageBus<AddressedMessage>::Inbox inbox1(1), inbox2(2);
+
+    SkMessageBus<AddressedMessage>::Post({0});  // Should go to both
+    SkMessageBus<AddressedMessage>::Post({1});  // Should go to inbox1
+    SkMessageBus<AddressedMessage>::Post({2});  // Should go to inbox2
+    SkMessageBus<AddressedMessage>::Post({3});  // Should go nowhere
+
+    SkTArray<AddressedMessage> messages;
+    inbox1.poll(&messages);
+    REPORTER_ASSERT(r, messages.count() == 2);
+    if (messages.count() == 2) {
+        REPORTER_ASSERT(r, messages[0].fInboxID == 0);
+        REPORTER_ASSERT(r, messages[1].fInboxID == 1);
+    }
+    inbox2.poll(&messages);
+    REPORTER_ASSERT(r, messages.count() == 2);
+    if (messages.count() == 2) {
+        REPORTER_ASSERT(r, messages[0].fInboxID == 0);
+        REPORTER_ASSERT(r, messages[1].fInboxID == 2);
+    }
+}
+
 // Multithreaded tests tbd.
diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp
index dceb3e7..5b7a67a 100644
--- a/tests/ResourceCacheTest.cpp
+++ b/tests/ResourceCacheTest.cpp
@@ -1003,8 +1003,8 @@
     typedef SkMessageBus<GrUniqueKeyInvalidatedMessage> Bus;
 
     // Invalidate two of the three, they should be purged and no longer accessible via their keys.
-    Bus::Post(Msg(key1));
-    Bus::Post(Msg(key2));
+    Bus::Post(Msg(key1, context->uniqueID()));
+    Bus::Post(Msg(key2, context->uniqueID()));
     cache->purgeAsNeeded();
     // a should be deleted now, but we still have a ref on b.
     REPORTER_ASSERT(reporter, !cache->hasUniqueKey(key1));
@@ -1013,7 +1013,7 @@
     REPORTER_ASSERT(reporter, cache->hasUniqueKey(key3));
 
     // Invalidate the third.
-    Bus::Post(Msg(key3));
+    Bus::Post(Msg(key3, context->uniqueID()));
     cache->purgeAsNeeded();
     // we still have a ref on b, c should be recycled as scratch.
     REPORTER_ASSERT(reporter, 2 == TestResource::NumAlive());
diff --git a/tests/TextureProxyTest.cpp b/tests/TextureProxyTest.cpp
index 15e3ef6..da072b5 100644
--- a/tests/TextureProxyTest.cpp
+++ b/tests/TextureProxyTest.cpp
@@ -255,7 +255,8 @@
     SkAssertResult(proxyProvider->assignUniqueKeyToProxy(key, proxy.get()));
 
     // Send an invalidation message, which will be sitting in the cache's inbox
-    SkMessageBus<GrUniqueKeyInvalidatedMessage>::Post(GrUniqueKeyInvalidatedMessage(key));
+    SkMessageBus<GrUniqueKeyInvalidatedMessage>::Post(
+            GrUniqueKeyInvalidatedMessage(key, context->uniqueID()));
 
     REPORTER_ASSERT(reporter, 1 == proxyProvider->numUniqueKeyProxies_TestOnly());
     REPORTER_ASSERT(reporter, 0 == cache->getResourceCount());
