diff --git a/include/dawn/platform/DawnPlatform.h b/include/dawn/platform/DawnPlatform.h
index 5c616d1..0645441 100644
--- a/include/dawn/platform/DawnPlatform.h
+++ b/include/dawn/platform/DawnPlatform.h
@@ -93,10 +93,10 @@
                                    const uint64_t* argValues,
                                    unsigned char flags);
 
-    // The |fingerprint| is provided by Dawn to inform the client to discard the Dawn caches
-    // when the fingerprint changes. The returned CachingInterface is expected to outlive the
-    // device which uses it to persistently cache objects.
-    virtual CachingInterface* GetCachingInterface(const void* fingerprint, size_t fingerprintSize);
+    // The returned CachingInterface is expected to outlive the device which uses it to persistently
+    // cache objects.
+    virtual CachingInterface* GetCachingInterface();
+
     virtual std::unique_ptr<WorkerTaskPool> CreateWorkerTaskPool();
 
   private:
diff --git a/src/dawn/native/BlobCache.cpp b/src/dawn/native/BlobCache.cpp
index 435f12d..a919318 100644
--- a/src/dawn/native/BlobCache.cpp
+++ b/src/dawn/native/BlobCache.cpp
@@ -14,7 +14,10 @@
 
 #include "dawn/native/BlobCache.h"
 
+#include <algorithm>
+
 #include "dawn/common/Assert.h"
+#include "dawn/common/Version_autogen.h"
 #include "dawn/native/CacheKey.h"
 #include "dawn/native/Instance.h"
 #include "dawn/platform/DawnPlatform.h"
@@ -39,6 +42,7 @@
 }
 
 Blob BlobCache::LoadInternal(const CacheKey& key) {
+    ASSERT(ValidateCacheKey(key));
     if (mCache == nullptr) {
         return Blob();
     }
@@ -55,6 +59,7 @@
 }
 
 void BlobCache::StoreInternal(const CacheKey& key, size_t valueSize, const void* value) {
+    ASSERT(ValidateCacheKey(key));
     ASSERT(value != nullptr);
     ASSERT(valueSize > 0);
     if (mCache == nullptr) {
@@ -63,4 +68,9 @@
     mCache->StoreData(key.data(), key.size(), value, valueSize);
 }
 
+bool BlobCache::ValidateCacheKey(const CacheKey& key) {
+    return std::search(key.begin(), key.end(), kDawnVersion.begin(), kDawnVersion.end()) !=
+           key.end();
+}
+
 }  // namespace dawn::native
diff --git a/src/dawn/native/BlobCache.h b/src/dawn/native/BlobCache.h
index 615af2f..61753a8 100644
--- a/src/dawn/native/BlobCache.h
+++ b/src/dawn/native/BlobCache.h
@@ -48,6 +48,10 @@
     Blob LoadInternal(const CacheKey& key);
     void StoreInternal(const CacheKey& key, size_t valueSize, const void* value);
 
+    // Validates the cache key for this version of Dawn. At the moment, this is naively checking
+    // that the cache key contains the dawn version string in it.
+    bool ValidateCacheKey(const CacheKey& key);
+
     // Protects thread safety of access to mCache.
     std::mutex mMutex;
     dawn::platform::CachingInterface* mCache;
diff --git a/src/dawn/native/CacheKey.cpp b/src/dawn/native/CacheKey.cpp
index 495b013..414b915 100644
--- a/src/dawn/native/CacheKey.cpp
+++ b/src/dawn/native/CacheKey.cpp
@@ -15,6 +15,8 @@
 #include "dawn/native/CacheKey.h"
 
 #include <iomanip>
+#include <string>
+#include <string_view>
 
 namespace dawn::native {
 
@@ -29,7 +31,13 @@
 
 template <>
 void CacheKeySerializer<std::string>::Serialize(CacheKey* key, const std::string& t) {
-    key->Record(static_cast<size_t>(t.length()));
+    key->Record(t.length());
+    key->insert(key->end(), t.begin(), t.end());
+}
+
+template <>
+void CacheKeySerializer<std::string_view>::Serialize(CacheKey* key, const std::string_view& t) {
+    key->Record(t.length());
     key->insert(key->end(), t.begin(), t.end());
 }
 
diff --git a/src/dawn/native/CacheKey.h b/src/dawn/native/CacheKey.h
index c2901db..98a3ce7 100644
--- a/src/dawn/native/CacheKey.h
+++ b/src/dawn/native/CacheKey.h
@@ -19,7 +19,6 @@
 #include <iostream>
 #include <limits>
 #include <memory>
-#include <string>
 #include <type_traits>
 #include <utility>
 #include <vector>
diff --git a/src/dawn/native/Device.cpp b/src/dawn/native/Device.cpp
index 55435d8..ab133bd 100644
--- a/src/dawn/native/Device.cpp
+++ b/src/dawn/native/Device.cpp
@@ -20,6 +20,7 @@
 #include <unordered_set>
 
 #include "dawn/common/Log.h"
+#include "dawn/common/Version_autogen.h"
 #include "dawn/native/Adapter.h"
 #include "dawn/native/AsyncTask.h"
 #include "dawn/native/AttachmentState.h"
@@ -208,7 +209,7 @@
     // Record the cache key from the properties. Note that currently, if a new extension
     // descriptor is added (and probably handled here), the cache key recording needs to be
     // updated.
-    mDeviceCacheKey.Record(adapterProperties, mEnabledFeatures.featuresBitSet,
+    mDeviceCacheKey.Record(kDawnVersion, adapterProperties, mEnabledFeatures.featuresBitSet,
                            mEnabledToggles.toggleBitset, cacheDesc);
 }
 
diff --git a/src/dawn/native/Instance.cpp b/src/dawn/native/Instance.cpp
index 3ea134c298..4a402a8 100644
--- a/src/dawn/native/Instance.cpp
+++ b/src/dawn/native/Instance.cpp
@@ -20,7 +20,6 @@
 #include "dawn/common/GPUInfo.h"
 #include "dawn/common/Log.h"
 #include "dawn/common/SystemUtils.h"
-#include "dawn/common/Version_autogen.h"
 #include "dawn/native/ChainUtils_autogen.h"
 #include "dawn/native/ErrorData.h"
 #include "dawn/native/Surface.h"
@@ -95,8 +94,8 @@
 }
 
 dawn::platform::CachingInterface* GetCachingInterface(dawn::platform::Platform* platform) {
-    if (platform != nullptr && dawn::kDawnVersion.size() > 0) {
-        return platform->GetCachingInterface(dawn::kDawnVersion.data(), dawn::kDawnVersion.size());
+    if (platform != nullptr) {
+        return platform->GetCachingInterface();
     }
     return nullptr;
 }
diff --git a/src/dawn/platform/DawnPlatform.cpp b/src/dawn/platform/DawnPlatform.cpp
index 0d52a33..3b22ade 100644
--- a/src/dawn/platform/DawnPlatform.cpp
+++ b/src/dawn/platform/DawnPlatform.cpp
@@ -53,8 +53,7 @@
     return 0;
 }
 
-dawn::platform::CachingInterface* Platform::GetCachingInterface(const void* fingerprint,
-                                                                size_t fingerprintSize) {
+dawn::platform::CachingInterface* Platform::GetCachingInterface() {
     return nullptr;
 }
 
diff --git a/src/dawn/tests/mocks/platform/CachingInterfaceMock.cpp b/src/dawn/tests/mocks/platform/CachingInterfaceMock.cpp
index a52d4c2..4622963 100644
--- a/src/dawn/tests/mocks/platform/CachingInterfaceMock.cpp
+++ b/src/dawn/tests/mocks/platform/CachingInterfaceMock.cpp
@@ -79,8 +79,6 @@
 DawnCachingMockPlatform::DawnCachingMockPlatform(dawn::platform::CachingInterface* cachingInterface)
     : mCachingInterface(cachingInterface) {}
 
-dawn::platform::CachingInterface* DawnCachingMockPlatform::GetCachingInterface(
-    const void* fingerprint,
-    size_t fingerprintSize) {
+dawn::platform::CachingInterface* DawnCachingMockPlatform::GetCachingInterface() {
     return mCachingInterface;
 }
diff --git a/src/dawn/tests/mocks/platform/CachingInterfaceMock.h b/src/dawn/tests/mocks/platform/CachingInterfaceMock.h
index 0e9e6af..154957b 100644
--- a/src/dawn/tests/mocks/platform/CachingInterfaceMock.h
+++ b/src/dawn/tests/mocks/platform/CachingInterfaceMock.h
@@ -63,8 +63,8 @@
 class DawnCachingMockPlatform : public dawn::platform::Platform {
   public:
     explicit DawnCachingMockPlatform(dawn::platform::CachingInterface* cachingInterface);
-    dawn::platform::CachingInterface* GetCachingInterface(const void* fingerprint,
-                                                          size_t fingerprintSize) override;
+
+    dawn::platform::CachingInterface* GetCachingInterface() override;
 
   private:
     dawn::platform::CachingInterface* mCachingInterface = nullptr;
diff --git a/src/dawn/tests/unittests/native/CacheKeyTests.cpp b/src/dawn/tests/unittests/native/CacheKeyTests.cpp
index abd1acc..615f2ac 100644
--- a/src/dawn/tests/unittests/native/CacheKeyTests.cpp
+++ b/src/dawn/tests/unittests/native/CacheKeyTests.cpp
@@ -163,7 +163,17 @@
     std::string str = "string";
 
     CacheKey expected;
-    expected.Record((size_t)6);
+    expected.Record(size_t(6));
+    expected.insert(expected.end(), str.begin(), str.end());
+
+    EXPECT_THAT(CacheKey().Record(str), CacheKeyEq(expected));
+}
+
+TEST(CacheKeySerializerTests, StdStringViews) {
+    static constexpr std::string_view str("string");
+
+    CacheKey expected;
+    expected.Record(size_t(6));
     expected.insert(expected.end(), str.begin(), str.end());
 
     EXPECT_THAT(CacheKey().Record(str), CacheKeyEq(expected));
