diff --git a/src/common/BitSetIterator.h b/src/common/BitSetIterator.h
index 14ba485..5a1c10f 100644
--- a/src/common/BitSetIterator.h
+++ b/src/common/BitSetIterator.h
@@ -23,7 +23,7 @@
 #include <limits>
 
 // This is ANGLE's BitSetIterator class with a customizable return type
-// TODO(cwallez@chromium.org): it could be optimized, in particular when N <= 64
+// TODO(crbug.com/dawn/306): it could be optimized, in particular when N <= 64
 
 template <typename T>
 T roundUp(const T value, const T alignment) {
diff --git a/src/common/GPUInfo.cpp b/src/common/GPUInfo.cpp
index 5aa44ee..1c2e80e 100644
--- a/src/common/GPUInfo.cpp
+++ b/src/common/GPUInfo.cpp
@@ -95,7 +95,7 @@
             }
         }
 
-        // TODO(jiawei.shao@intel.com): support other GPU vendors
+        // TODO(crbug.com/dawn/823): support other GPU vendors
         UNREACHABLE();
         return 0;
     }
diff --git a/src/common/SlabAllocator.cpp b/src/common/SlabAllocator.cpp
index e58a235..0ffb073 100644
--- a/src/common/SlabAllocator.cpp
+++ b/src/common/SlabAllocator.cpp
@@ -209,7 +209,7 @@
         mRecycledSlabs.Prepend(slab);
     }
 
-    // TODO(enga): Occasionally prune slabs if |blocksInUse == 0|.
+    // TODO(crbug.com/dawn/825): Occasionally prune slabs if |blocksInUse == 0|.
     // Doing so eagerly hurts performance.
 }
 
@@ -228,7 +228,7 @@
         return;
     }
 
-    // TODO(enga): Use aligned_alloc with C++17.
+    // TODO(crbug.com/dawn/824): Use aligned_alloc with C++17.
     char* allocation = new char[mTotalAllocationSize];
     char* alignedPtr = AlignPtr(allocation, mAllocationAlignment);
 
diff --git a/src/common/SlabAllocator.h b/src/common/SlabAllocator.h
index 8a78dde..b02ed52 100644
--- a/src/common/SlabAllocator.h
+++ b/src/common/SlabAllocator.h
@@ -57,7 +57,7 @@
   public:
     // Allocations host their current index and the index of the next free block.
     // Because this is an index, and not a byte offset, it can be much smaller than a size_t.
-    // TODO(enga): Is uint8_t sufficient?
+    // TODO(crbug.com/dawn/825): Is uint8_t sufficient?
     using Index = uint16_t;
 
     SlabAllocatorImpl(SlabAllocatorImpl&& rhs);
diff --git a/src/dawn_native/Adapter.cpp b/src/dawn_native/Adapter.cpp
index 3e70831..ff95534 100644
--- a/src/dawn_native/Adapter.cpp
+++ b/src/dawn_native/Adapter.cpp
@@ -85,8 +85,6 @@
             }
         }
 
-        // TODO(cwallez@chromium.org): This will eventually have validation that the device
-        // descriptor is valid and is a subset what's allowed on this adapter.
         DAWN_TRY_ASSIGN(*result, CreateDeviceImpl(descriptor));
         return {};
     }
diff --git a/src/dawn_native/AsyncTask.h b/src/dawn_native/AsyncTask.h
index 5a702a3..1ae9344 100644
--- a/src/dawn_native/AsyncTask.h
+++ b/src/dawn_native/AsyncTask.h
@@ -29,7 +29,7 @@
 
 namespace dawn_native {
 
-    // TODO(jiawei.shao@intel.com): we'll add additional things to AsyncTask in the future, like
+    // TODO(crbug.com/dawn/826): we'll add additional things to AsyncTask in the future, like
     // Cancel() and RunNow(). Cancelling helps avoid running the task's body when we are just
     // shutting down the device. RunNow() could be used for more advanced scenarios, for example
     // always doing ShaderModule initial compilation asynchronously, but being able to steal the
diff --git a/src/dawn_native/BuddyAllocator.cpp b/src/dawn_native/BuddyAllocator.cpp
index 60a8b9b..b19cc19 100644
--- a/src/dawn_native/BuddyAllocator.cpp
+++ b/src/dawn_native/BuddyAllocator.cpp
@@ -202,7 +202,7 @@
     void BuddyAllocator::Deallocate(uint64_t offset) {
         BuddyBlock* curr = mRoot;
 
-        // TODO(bryan.bernhart@intel.com): Optimize de-allocation.
+        // TODO(crbug.com/dawn/827): Optimize de-allocation.
         // Passing allocationSize directly will avoid the following level-by-level search;
         // however, it requires the size information to be stored outside the allocator.
 
diff --git a/src/dawn_native/BuddyAllocator.h b/src/dawn_native/BuddyAllocator.h
index 8404158..af959fc 100644
--- a/src/dawn_native/BuddyAllocator.h
+++ b/src/dawn_native/BuddyAllocator.h
@@ -100,7 +100,7 @@
         // Keep track the head and tail (for faster insertion/removal).
         struct BlockList {
             BuddyBlock* head = nullptr;  // First free block in level.
-            // TODO(bryan.bernhart@intel.com): Track the tail.
+            // TODO(crbug.com/dawn/827): Track the tail.
         };
 
         BuddyBlock* mRoot = nullptr;  // Used to deallocate non-free blocks.
diff --git a/src/dawn_native/Buffer.cpp b/src/dawn_native/Buffer.cpp
index 3ddb72b..cdd9f05 100644
--- a/src/dawn_native/Buffer.cpp
+++ b/src/dawn_native/Buffer.cpp
@@ -138,7 +138,7 @@
             mUsage |= kReadOnlyStorageBuffer;
         }
 
-        // TODO(hao.x.li@intel.com): This is just a workaround to make QueryResolve buffer pass the
+        // TODO(crbug.com/dawn/434): This is just a workaround to make QueryResolve buffer pass the
         // binding group validation when used as an internal resource. Instead the buffer made with
         // QueryResolve usage would implicitly get StorageInternal usage which is only compatible
         // with StorageBufferInternal binding type in BGL, not StorageBuffer binding type.
@@ -213,8 +213,8 @@
         } else {
             // If any of these fail, the buffer will be deleted and replaced with an
             // error buffer.
-            // TODO(enga): Suballocate and reuse memory from a larger staging buffer so we don't
-            // create many small buffers.
+            // TODO(crbug.com/dawn/828): Suballocate and reuse memory from a larger staging buffer
+            // so we don't create many small buffers.
             DAWN_TRY_ASSIGN(mStagingBuffer, GetDevice()->CreateStagingBuffer(GetSize()));
         }
 
diff --git a/src/dawn_native/CommandAllocator.cpp b/src/dawn_native/CommandAllocator.cpp
index 7c94520..5ae5cfc 100644
--- a/src/dawn_native/CommandAllocator.cpp
+++ b/src/dawn_native/CommandAllocator.cpp
@@ -104,7 +104,7 @@
         return mBlocks[0].block == reinterpret_cast<const uint8_t*>(&mEndOfBlock);
     }
 
-    // Potential TODO(cwallez@chromium.org):
+    // Potential TODO(crbug.com/dawn/835):
     //  - Host the size and pointer to next block in the block itself to avoid having an allocation
     //    in the vector
     //  - Assume T's alignof is, say 64bits, static assert it, and make commandAlignment a constant
diff --git a/src/dawn_native/CommandAllocator.h b/src/dawn_native/CommandAllocator.h
index 0383dc1..2713545 100644
--- a/src/dawn_native/CommandAllocator.h
+++ b/src/dawn_native/CommandAllocator.h
@@ -17,6 +17,7 @@
 
 #include "common/Assert.h"
 #include "common/Math.h"
+#include "common/NonCopyable.h"
 
 #include <cstddef>
 #include <cstdint>
@@ -66,8 +67,7 @@
 
     class CommandAllocator;
 
-    // TODO(cwallez@chromium.org): prevent copy for both iterator and allocator
-    class CommandIterator {
+    class CommandIterator : public NonCopyable {
       public:
         CommandIterator();
         ~CommandIterator();
@@ -144,7 +144,7 @@
         uint32_t mEndOfBlock = detail::kEndOfBlock;
     };
 
-    class CommandAllocator {
+    class CommandAllocator : public NonCopyable {
       public:
         CommandAllocator();
         ~CommandAllocator();
diff --git a/src/dawn_native/CommandEncoder.cpp b/src/dawn_native/CommandEncoder.cpp
index 05d0656..30472ca 100644
--- a/src/dawn_native/CommandEncoder.cpp
+++ b/src/dawn_native/CommandEncoder.cpp
@@ -399,7 +399,7 @@
                     "set");
             }
 
-            // TODO(hao.x.li@intel.com): Validate that the queries between [firstQuery, firstQuery +
+            // TODO(crbug.com/dawn/434): Validate that the queries between [firstQuery, firstQuery +
             // queryCount - 1] must be available(written by query operations).
 
             // The destinationOffset must be a multiple of 8 bytes on D3D12 and Vulkan
diff --git a/src/dawn_native/CommandValidation.cpp b/src/dawn_native/CommandValidation.cpp
index ba70ce7..65c8743 100644
--- a/src/dawn_native/CommandValidation.cpp
+++ b/src/dawn_native/CommandValidation.cpp
@@ -303,8 +303,6 @@
     MaybeError ValidateTextureCopyRange(DeviceBase const* device,
                                         const ImageCopyTexture& textureCopy,
                                         const Extent3D& copySize) {
-        // TODO(jiawei.shao@intel.com): add validations on the texture-to-texture copies within the
-        // same texture.
         const TextureBase* texture = textureCopy.texture;
 
         ASSERT(texture->GetDimension() != wgpu::TextureDimension::e1D);
diff --git a/src/dawn_native/Device.cpp b/src/dawn_native/Device.cpp
index 1efe91d..b70e844 100644
--- a/src/dawn_native/Device.cpp
+++ b/src/dawn_native/Device.cpp
@@ -264,7 +264,7 @@
 
             // Move away from the Alive state so that the application cannot use this device
             // anymore.
-            // TODO(cwallez@chromium.org): Do we need atomics for this to become visible to other
+            // TODO(crbug.com/dawn/831): Do we need atomics for this to become visible to other
             // threads in a multithreaded scenario?
             mState = State::BeingDisconnected;
 
@@ -896,7 +896,7 @@
                 AssumeCommandsComplete();
             }
 
-            // TODO(cwallez@chromium.org): decouple TickImpl from updating the serial so that we can
+            // TODO(crbug.com/dawn/833): decouple TickImpl from updating the serial so that we can
             // tick the dynamic uploader before the backend resource allocators. This would allow
             // reclaiming resources one tick earlier.
             mDynamicUploader->Deallocate(mCompletedSerial);
@@ -1126,7 +1126,7 @@
         return layoutRef;
     }
 
-    // TODO(jiawei.shao@intel.com): override this function with the async version on the backends
+    // This function is overwritten with the async version on the backends
     // that supports creating compute pipeline asynchronously
     void DeviceBase::CreateComputePipelineAsyncImpl(const ComputePipelineDescriptor* descriptor,
                                                     size_t blueprintHash,
diff --git a/src/dawn_native/Format.cpp b/src/dawn_native/Format.cpp
index b5d8c84..0bebc18 100644
--- a/src/dawn_native/Format.cpp
+++ b/src/dawn_native/Format.cpp
@@ -297,14 +297,15 @@
 
         // Depth-stencil formats
         AddDepthFormat(wgpu::TextureFormat::Depth32Float, 4);
+        // TODO(crbug.com/dawn/843): This is 4 because we read this to perform zero initialization,
+        // and textures are always use depth32float. We should improve this to be more robust. Perhaps,
+        // using 0 here to mean "unsized" and adding a backend-specific query for the block size.
         AddDepthFormat(wgpu::TextureFormat::Depth24Plus, 4);
         // TODO(dawn:666): Implement the stencil8 format
         AddStencilFormat(wgpu::TextureFormat::Stencil8);
-        // TODO(cwallez@chromium.org): It isn't clear if this format should be copyable
-        // because its size isn't well defined, is it 4, 5 or 8?
         AddMultiAspectFormat(wgpu::TextureFormat::Depth24PlusStencil8,
                               Aspect::Depth | Aspect::Stencil, wgpu::TextureFormat::Depth24Plus, wgpu::TextureFormat::Stencil8, true, true);
-	// TODO(dawn:690): Implement Depth16Unorm, Depth24UnormStencil8, Depth32FloatStencil8.
+        // TODO(dawn:690): Implement Depth16Unorm, Depth24UnormStencil8, Depth32FloatStencil8.
 
         // BC compressed formats
         bool isBCFormatSupported = device->IsExtensionEnabled(Extension::TextureCompressionBC);
diff --git a/src/dawn_native/RenderPipeline.cpp b/src/dawn_native/RenderPipeline.cpp
index 5231119..1a8f37c 100644
--- a/src/dawn_native/RenderPipeline.cpp
+++ b/src/dawn_native/RenderPipeline.cpp
@@ -458,9 +458,6 @@
                     NormalizeBlendFactor(mTargetBlend[i].color.dstFactor);
             }
         }
-
-        // TODO(cwallez@chromium.org): Check against the shader module that the correct color
-        // attachment are set?
     }
 
     RenderPipelineBase::RenderPipelineBase(DeviceBase* device, ObjectBase::ErrorTag tag)
diff --git a/src/dawn_native/ShaderModule.cpp b/src/dawn_native/ShaderModule.cpp
index b2a2a1f..96fe955 100644
--- a/src/dawn_native/ShaderModule.cpp
+++ b/src/dawn_native/ShaderModule.cpp
@@ -635,8 +635,6 @@
             std::unique_ptr<EntryPointMetadata> metadata = std::make_unique<EntryPointMetadata>();
             metadata->stage = stage;
 
-            // TODO(cwallez@chromium.org): make errors here creation errors
-            // currently errors here do not prevent the shadermodule from being used
             const auto& resources = compiler.get_shader_resources();
 
             if (resources.push_constant_buffers.size() > 0) {
diff --git a/src/dawn_native/Subresource.cpp b/src/dawn_native/Subresource.cpp
index 1114bae..99b42cb 100644
--- a/src/dawn_native/Subresource.cpp
+++ b/src/dawn_native/Subresource.cpp
@@ -78,7 +78,7 @@
     }
 
     uint8_t GetAspectCount(Aspect aspects) {
-        // TODO(cwallez@chromium.org): This should use popcount once Dawn has such a function.
+        // TODO(crbug.com/dawn/829): This should use popcount once Dawn has such a function.
         // Note that we can't do a switch because compilers complain that Depth | Stencil is not
         // a valid enum value.
         if (aspects == Aspect::Color || aspects == Aspect::Depth ||
diff --git a/src/dawn_native/SubresourceStorage.h b/src/dawn_native/SubresourceStorage.h
index 2a7e91a..01bd686 100644
--- a/src/dawn_native/SubresourceStorage.h
+++ b/src/dawn_native/SubresourceStorage.h
@@ -101,7 +101,7 @@
            third_party/dawn/src/dawn_native
     */
     //
-    // TODO(cwallez@chromium.org): Make the recompression optional, the calling code should know
+    // TODO(crbug.com/dawn/836): Make the recompression optional, the calling code should know
     // if recompression can happen or not in Update() and Merge()
     template <typename T>
     class SubresourceStorage {
diff --git a/src/dawn_native/SwapChain.cpp b/src/dawn_native/SwapChain.cpp
index aa5f894..b81d906 100644
--- a/src/dawn_native/SwapChain.cpp
+++ b/src/dawn_native/SwapChain.cpp
@@ -75,7 +75,7 @@
 
             DAWN_TRY(ValidatePresentMode(descriptor->presentMode));
 
-            // TODO(cwallez@chromium.org): Lift this restriction once
+            // TODO(crbug.com/dawn/160): Lift this restriction once
             // wgpu::Instance::GetPreferredSurfaceFormat is implemented.
             if (descriptor->format != wgpu::TextureFormat::BGRA8Unorm) {
                 return DAWN_VALIDATION_ERROR("Format must (currently) be BGRA8Unorm");
diff --git a/src/dawn_native/Texture.cpp b/src/dawn_native/Texture.cpp
index 0903e62..0bec001 100644
--- a/src/dawn_native/Texture.cpp
+++ b/src/dawn_native/Texture.cpp
@@ -26,7 +26,8 @@
 
 namespace dawn_native {
     namespace {
-        // TODO(jiawei.shao@intel.com): implement texture view format compatibility rule
+        // WebGPU currently does not have texture format reinterpretation. If it does, the
+        // code to check for it might go here.
         MaybeError ValidateTextureViewFormatCompatibility(const TextureBase* texture,
                                                           const TextureViewDescriptor* descriptor) {
             if (texture->GetFormat().format != descriptor->format) {
@@ -43,7 +44,7 @@
             return {};
         }
 
-        // TODO(jiawei.shao@intel.com): support validation on all texture view dimensions
+        // TODO(crbug.com/dawn/814): Implement for 1D texture.
         bool IsTextureViewDimensionCompatibleWithTextureDimension(
             wgpu::TextureViewDimension textureViewDimension,
             wgpu::TextureDimension textureDimension) {
@@ -63,7 +64,7 @@
             }
         }
 
-        // TODO(jiawei.shao@intel.com): support validation on all texture view dimensions
+        // TODO(crbug.com/dawn/814): Implement for 1D texture.
         bool IsArrayLayerValidForTextureViewDimension(
             wgpu::TextureViewDimension textureViewDimension,
             uint32_t textureViewArrayLayer) {
@@ -102,7 +103,6 @@
             }
         }
 
-        // TODO(jiawei.shao@intel.com): support more sample count.
         MaybeError ValidateSampleCount(const TextureDescriptor* descriptor, const Format* format) {
             if (!IsValidSampleCount(descriptor->sampleCount)) {
                 return DAWN_VALIDATION_ERROR("The sample count of the texture is not supported.");
@@ -264,7 +264,6 @@
         DAWN_TRY(ValidateTextureDimension(descriptor->dimension));
         DAWN_TRY(ValidateSampleCount(descriptor, format));
 
-        // TODO(jiawei.shao@intel.com): check stuff based on the dimension
         if (descriptor->size.width == 0 || descriptor->size.height == 0 ||
             descriptor->size.depthOrArrayLayers == 0 || descriptor->mipLevelCount == 0) {
             return DAWN_VALIDATION_ERROR("Cannot create an empty texture");
@@ -326,7 +325,6 @@
             return DAWN_VALIDATION_ERROR("Texture does not have selected aspect for texture view.");
         }
 
-        // TODO(jiawei.shao@intel.com): check stuff based on resource limits
         if (descriptor->arrayLayerCount == 0 || descriptor->mipLevelCount == 0) {
             return DAWN_VALIDATION_ERROR("Cannot create an empty texture view");
         }
@@ -392,6 +390,8 @@
         return desc;
     }
 
+    // WebGPU only supports sample counts of 1 and 4. We could expand to more based on
+    // platform support, but it would probably be an extension.
     bool IsValidSampleCount(uint32_t sampleCount) {
         switch (sampleCount) {
             case 1:
@@ -443,7 +443,6 @@
         return mDimension;
     }
 
-    // TODO(jiawei.shao@intel.com): return more information about texture format
     const Format& TextureBase::GetFormat() const {
         ASSERT(!IsError());
         return mFormat;
@@ -468,7 +467,7 @@
     }
     uint32_t TextureBase::GetArrayLayers() const {
         ASSERT(!IsError());
-        // TODO(cwallez@chromium.org): Update for 1D textures when they are supported.
+        // TODO(crbug.com/dawn/814): Update for 1D textures when they are supported.
         ASSERT(mDimension != wgpu::TextureDimension::e1D);
         if (mDimension == wgpu::TextureDimension::e3D) {
             return 1;
@@ -582,7 +581,7 @@
         // Compressed Textures will have paddings if their width or height is not a multiple of
         // 4 at non-zero mipmap levels.
         if (mFormat.isCompressed) {
-            // TODO(jiawei.shao@intel.com): check if there are any overflows.
+            // TODO(crbug.com/dawn/830): check if there are any overflows.
             const TexelBlockInfo& blockInfo = mFormat.GetAspectInfo(wgpu::TextureAspect::All).block;
             extent.width = (extent.width + blockInfo.width - 1) / blockInfo.width * blockInfo.width;
             extent.height =
diff --git a/src/dawn_native/Texture.h b/src/dawn_native/Texture.h
index a803dda..43076ef 100644
--- a/src/dawn_native/Texture.h
+++ b/src/dawn_native/Texture.h
@@ -99,7 +99,6 @@
 
         MaybeError ValidateDestroy() const;
         wgpu::TextureDimension mDimension;
-        // TODO(cwallez@chromium.org): This should be deduplicated in the Device
         const Format& mFormat;
         Extent3D mSize;
         uint32_t mMipLevelCount;
@@ -134,7 +133,6 @@
 
         Ref<TextureBase> mTexture;
 
-        // TODO(cwallez@chromium.org): This should be deduplicated in the Device
         const Format& mFormat;
         wgpu::TextureViewDimension mDimension;
         SubresourceRange mRange;
diff --git a/src/dawn_native/d3d12/BindGroupD3D12.cpp b/src/dawn_native/d3d12/BindGroupD3D12.cpp
index a1b095b..2857d2d 100644
--- a/src/dawn_native/d3d12/BindGroupD3D12.cpp
+++ b/src/dawn_native/d3d12/BindGroupD3D12.cpp
@@ -69,8 +69,6 @@
                     switch (bindingInfo.buffer.type) {
                         case wgpu::BufferBindingType::Uniform: {
                             D3D12_CONSTANT_BUFFER_VIEW_DESC desc;
-                            // TODO(enga@google.com): investigate if this needs to be a constraint
-                            // at the API level
                             desc.SizeInBytes = Align(binding.size, 256);
                             desc.BufferLocation =
                                 ToBackend(binding.buffer)->GetVA() + binding.offset;
diff --git a/src/dawn_native/d3d12/BufferD3D12.cpp b/src/dawn_native/d3d12/BufferD3D12.cpp
index a73eb9b..b5e17f7 100644
--- a/src/dawn_native/d3d12/BufferD3D12.cpp
+++ b/src/dawn_native/d3d12/BufferD3D12.cpp
@@ -109,8 +109,6 @@
         D3D12_RESOURCE_DESC resourceDescriptor;
         resourceDescriptor.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;
         resourceDescriptor.Alignment = 0;
-        // TODO(cwallez@chromium.org): Have a global "zero" buffer that can do everything instead
-        // of creating a new 4-byte buffer?
         // D3D buffers are always resource size aligned to 64KB. However, D3D12's validation forbids
         // binding a CBV to an unaligned size. To prevent, one can always safely align the buffer
         // desc size to the CBV data alignment as other buffer usages ignore it (no size check).
diff --git a/src/dawn_native/d3d12/CommandBufferD3D12.cpp b/src/dawn_native/d3d12/CommandBufferD3D12.cpp
index b0b8e46..107e70e 100644
--- a/src/dawn_native/d3d12/CommandBufferD3D12.cpp
+++ b/src/dawn_native/d3d12/CommandBufferD3D12.cpp
@@ -744,7 +744,7 @@
                         commandList->CopyResource(destination->GetD3D12Resource(),
                                                   source->GetD3D12Resource());
                     } else {
-                        // TODO(jiawei.shao@intel.com): support copying with 1D and 3D textures.
+                        // TODO(crbug.com/dawn/814): support copying with 1D.
                         ASSERT(source->GetDimension() == wgpu::TextureDimension::e2D &&
                                destination->GetDimension() == wgpu::TextureDimension::e2D);
                         const dawn_native::Extent3D copyExtentOneSlice = {
diff --git a/src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp b/src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp
index c29ae72..db11862 100644
--- a/src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp
+++ b/src/dawn_native/d3d12/NativeSwapChainImplD3D12.cpp
@@ -95,7 +95,7 @@
         mCurrentBuffer = mSwapChain->GetCurrentBackBufferIndex();
         nextTexture->texture.ptr = mBuffers[mCurrentBuffer].Get();
 
-        // TODO(cwallez@chromium.org) Currently we force the CPU to wait for the GPU to be finished
+        // TODO(crbug.com/dawn/269) Currently we force the CPU to wait for the GPU to be finished
         // with the buffer. Ideally the synchronization should be all done on the GPU.
         ASSERT(mDevice->WaitForSerial(mBufferSerials[mCurrentBuffer]).IsSuccess());
 
@@ -106,7 +106,7 @@
         // This assumes the texture has already been transition to the PRESENT state.
 
         ASSERT_SUCCESS(mSwapChain->Present(mInterval, 0));
-        // TODO(cwallez@chromium.org): Make the serial ticking implicit.
+        // TODO(crbug.com/dawn/833): Make the serial ticking implicit.
         ASSERT(mDevice->NextSerial().IsSuccess());
 
         mBufferSerials[mCurrentBuffer] = mDevice->GetPendingCommandSerial();
diff --git a/src/dawn_native/d3d12/SwapChainD3D12.cpp b/src/dawn_native/d3d12/SwapChainD3D12.cpp
index 9002cc4..98388da 100644
--- a/src/dawn_native/d3d12/SwapChainD3D12.cpp
+++ b/src/dawn_native/d3d12/SwapChainD3D12.cpp
@@ -161,17 +161,17 @@
             return InitializeSwapChainFromScratch();
         }
 
-        // TODO(cwallez@chromium.org): figure out what should happen when surfaces are used by
+        // TODO(crbug.com/dawn/269): figure out what should happen when surfaces are used by
         // multiple backends one after the other. It probably needs to block until the backend
         // and GPU are completely finished with the previous swapchain.
         if (previousSwapChain->GetBackendType() != wgpu::BackendType::D3D12) {
             return DAWN_VALIDATION_ERROR("d3d12::SwapChain cannot switch between APIs");
         }
 
-        // TODO(cwallez@chromium.org): use ToBackend once OldSwapChainBase is removed.
+        // TODO(crbug.com/dawn/269): use ToBackend once OldSwapChainBase is removed.
         SwapChain* previousD3D12SwapChain = static_cast<SwapChain*>(previousSwapChain);
 
-        // TODO(cwallez@chromium.org): Figure out switching an HWND between devices, it might
+        // TODO(crbug.com/dawn/269): Figure out switching an HWND between devices, it might
         // require just losing the reference to the swapchain, but might also need to wait for
         // all previous operations to complete.
         if (GetDevice() != previousSwapChain->GetDevice()) {
diff --git a/src/dawn_native/dawn_platform.h b/src/dawn_native/dawn_platform.h
index 4591c0f..4a0ba09 100644
--- a/src/dawn_native/dawn_platform.h
+++ b/src/dawn_native/dawn_platform.h
@@ -32,7 +32,7 @@
 
     // Add an extra texture usage for textures that will be presented, for use in backends
     // that needs to transition to present usage.
-    // TODO(cwallez@chromium.org): It currently aliases wgpu::TextureUsage::Present, assign it
+    // This currently aliases wgpu::TextureUsage::Present, we would assign it
     // some bit when wgpu::TextureUsage::Present is removed.
     static constexpr wgpu::TextureUsage kPresentTextureUsage = wgpu::TextureUsage::Present;
 }  // namespace dawn_native
diff --git a/src/dawn_native/metal/BackendMTL.mm b/src/dawn_native/metal/BackendMTL.mm
index dcf01f9..6155fe3 100644
--- a/src/dawn_native/metal/BackendMTL.mm
+++ b/src/dawn_native/metal/BackendMTL.mm
@@ -222,7 +222,7 @@
                     [*mDevice supportsFamily:MTLGPUFamilyApple5]) {
                     mSupportedExtensions.EnableExtension(Extension::PipelineStatisticsQuery);
 
-                    // TODO(hao.x.li@intel.com): Not enable timestamp query here becuase it's not
+                    // TODO(crbug.com/dawn/434): Not enable timestamp query here becuase it's not
                     // clear how to convert timestamps to nanoseconds on Metal.
                     // See https://github.com/gpuweb/gpuweb/issues/1325
                 }
diff --git a/src/tests/DawnTest.cpp b/src/tests/DawnTest.cpp
index 7496d6a..7414e92 100644
--- a/src/tests/DawnTest.cpp
+++ b/src/tests/DawnTest.cpp
@@ -1054,8 +1054,6 @@
     uint32_t size = utils::RequiredBytesInCopy(bytesPerRow, rowsPerImage, extent.width,
                                                extent.height, extent.depthOrArrayLayers, dataSize);
 
-    // TODO(enga): We should have the map async alignment in Contants.h. Also, it should change to 8
-    // for Float64Array.
     auto readback = ReserveReadback(Align(size, 4));
 
     // We need to enqueue the copy immediately because by the time we resolve the expectation,
@@ -1176,8 +1174,6 @@
 }
 
 DawnTestBase::ReadbackReservation DawnTestBase::ReserveReadback(uint64_t readbackSize) {
-    // For now create a new MapRead buffer for each readback
-    // TODO(cwallez@chromium.org): eventually make bigger buffers and allocate linearly?
     ReadbackSlot slot;
     slot.bufferSize = readbackSize;
 
diff --git a/src/tests/DawnTest.h b/src/tests/DawnTest.h
index 7b837a5..adb6ebe 100644
--- a/src/tests/DawnTest.h
+++ b/src/tests/DawnTest.h
@@ -84,7 +84,6 @@
 #define EXPECT_PIXEL_RGBA8_BETWEEN(color0, color1, texture, x, y) \
     AddTextureBetweenColorsExpectation(__FILE__, __LINE__, color0, color1, texture, x, y)
 
-// TODO(enga): Migrate other texure expectation helpers to this common one.
 #define EXPECT_TEXTURE_EQ(...) AddTextureExpectation(__FILE__, __LINE__, __VA_ARGS__)
 
 // Should only be used to test validation of function that can't be tested by regular validation
diff --git a/src/tests/end2end/BufferZeroInitTests.cpp b/src/tests/end2end/BufferZeroInitTests.cpp
index 7d78ec4..55bdf90 100644
--- a/src/tests/end2end/BufferZeroInitTests.cpp
+++ b/src/tests/end2end/BufferZeroInitTests.cpp
@@ -1198,8 +1198,8 @@
     // Timestamp query is not supported on OpenGL
     DAWN_TEST_UNSUPPORTED_IF(IsOpenGL());
 
-    // TODO(hao.x.li@intel.com): Crash occurs if we only call WriteTimestamp in a command encoder
-    // without any copy commands on Metal on AMD GPU. See https://crbug.com/dawn/545.
+    // TODO(crbug.com/dawn/545): Crash occurs if we only call WriteTimestamp in a command encoder
+    // without any copy commands on Metal on AMD GPU.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsAMD());
 
     // Skip if timestamp extension is not supported on device
diff --git a/src/tests/end2end/CompressedTextureFormatTests.cpp b/src/tests/end2end/CompressedTextureFormatTests.cpp
index 96b704c..99fde59 100644
--- a/src/tests/end2end/CompressedTextureFormatTests.cpp
+++ b/src/tests/end2end/CompressedTextureFormatTests.cpp
@@ -402,8 +402,7 @@
         return expectedData;
     }
 
-    // Right now we only test 2D array textures with BC formats.
-    // TODO(jiawei.shao@intel.com): support 1D/3D textures
+    // Note: BC formats are only valid with 2D (array) textures.
     static wgpu::Extent3D GetVirtualSizeAtLevel(const CopyConfig& config) {
         return {config.textureDescriptor.size.width >> config.viewMipmapLevel,
                 config.textureDescriptor.size.height >> config.viewMipmapLevel,
@@ -431,7 +430,7 @@
 
 // Test copying into the whole BC texture with 2x2 blocks and sampling from it.
 TEST_P(CompressedTextureBCFormatTest, Basic) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -468,7 +467,7 @@
 
 // Test copying into the non-zero layer of a 2D array texture with BC formats works correctly.
 TEST_P(CompressedTextureBCFormatTest, CopyIntoNonZeroArrayLayer) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -493,7 +492,7 @@
 
 // Test copying into a non-zero mipmap level of a texture with BC texture formats.
 TEST_P(CompressedTextureBCFormatTest, CopyBufferIntoNonZeroMipmapLevel) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -532,7 +531,7 @@
 
 // Test texture-to-texture whole-size copies with BC formats.
 TEST_P(CompressedTextureBCFormatTest, CopyWholeTextureSubResourceIntoNonZeroMipmapLevel) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -540,9 +539,8 @@
     // This test uses glTextureView() which is not supported in OpenGL ES.
     DAWN_TEST_UNSUPPORTED_IF(IsOpenGLES());
 
-    // TODO(cwallez@chromium.org): This consistently fails on with the 12th pixel being opaque black
-    // instead of opaque red on Win10 FYI Release (NVIDIA GeForce GTX 1660). See
-    // https://bugs.chromium.org/p/chromium/issues/detail?id=981393
+    // TODO(crbug.com/dawn/816): This consistently fails on with the 12th pixel being opaque black
+    // instead of opaque red on Win10 FYI Release (NVIDIA GeForce GTX 1660).
     DAWN_SUPPRESS_TEST_IF(IsWindows() && IsVulkan() && IsNvidia());
 
     CopyConfig config;
@@ -591,7 +589,7 @@
 TEST_P(CompressedTextureBCFormatTest, CopyIntoSubresourceWithPhysicalSizeNotEqualToVirtualSize) {
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
 
-    // TODO(jiawei.shao@intel.com): add workaround on the T2T copies where Extent3D fits in one
+    // TODO(crbug.com/dawn/817): add workaround on the T2T copies where Extent3D fits in one
     // subresource and does not fit in another one on OpenGL.
     DAWN_SUPPRESS_TEST_IF(IsOpenGL() || IsOpenGLES());
 
@@ -651,7 +649,7 @@
 TEST_P(CompressedTextureBCFormatTest, CopyFromSubresourceWithPhysicalSizeNotEqualToVirtualSize) {
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
 
-    // TODO(jiawei.shao@intel.com): add workaround on the T2T copies where Extent3D fits in one
+    // TODO(crbug.com/dawn/817): add workaround on the T2T copies where Extent3D fits in one
     // subresource and does not fit in another one on OpenGL.
     DAWN_SUPPRESS_TEST_IF(IsOpenGL() || IsOpenGLES());
 
@@ -707,7 +705,7 @@
 TEST_P(CompressedTextureBCFormatTest, MultipleCopiesWithPhysicalSizeNotEqualToVirtualSize) {
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
 
-    // TODO(jiawei.shao@intel.com): add workaround on the T2T copies where Extent3D fits in one
+    // TODO(crbug.com/dawn/817): add workaround on the T2T copies where Extent3D fits in one
     // subresource and does not fit in another one on OpenGL.
     DAWN_SUPPRESS_TEST_IF(IsOpenGL() || IsOpenGLES());
 
@@ -787,7 +785,7 @@
 TEST_P(CompressedTextureBCFormatTest, CopyWithMultipleLayerAndPhysicalSizeNotEqualToVirtualSize) {
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
 
-    // TODO(jiawei.shao@intel.com): add workaround on the T2T copies where Extent3D fits in one
+    // TODO(crbug.com/dawn/817): add workaround on the T2T copies where Extent3D fits in one
     // subresource and does not fit in another one on OpenGL.
     DAWN_SUPPRESS_TEST_IF(IsOpenGL() || IsOpenGLES());
 
@@ -857,7 +855,7 @@
 // Test the special case of the B2T copies on the D3D12 backend that the buffer offset and texture
 // extent exactly fit the RowPitch.
 TEST_P(CompressedTextureBCFormatTest, BufferOffsetAndExtentFitRowPitch) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -886,7 +884,7 @@
 // backend the texelOffset.y will be greater than 0 after calcuting the texelOffset in the function
 // ComputeTexelOffsets().
 TEST_P(CompressedTextureBCFormatTest, BufferOffsetExceedsSlicePitch) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -917,7 +915,7 @@
 // Test the special case of the B2T copies on the D3D12 backend that the buffer offset and texture
 // extent exceed the RowPitch. On D3D12 backend two copies are required for this case.
 TEST_P(CompressedTextureBCFormatTest, CopyWithBufferOffsetAndExtentExceedRowPitch) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -974,7 +972,7 @@
 // copyExtent.depthOrArrayLayers) on Metal backends. As copyExtent.depthOrArrayLayers can only be 1
 // for BC formats, on Metal backend we will use two copies to implement such copy.
 TEST_P(CompressedTextureBCFormatTest, LargeImageHeight) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -995,7 +993,7 @@
 // Test the workaround in the B2T copies when (bufferSize - bufferOffset < bytesPerImage *
 // copyExtent.depthOrArrayLayers) and copyExtent needs to be clamped.
 TEST_P(CompressedTextureBCFormatTest, LargeImageHeightAndClampedCopyExtent) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -1037,7 +1035,7 @@
 // Test copying a whole 2D array texture with array layer count > 1 in one copy command works with
 // BC formats.
 TEST_P(CompressedTextureBCFormatTest, CopyWhole2DArrayTexture) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -1063,7 +1061,7 @@
 
 // Test copying a multiple 2D texture array layers in one copy command works with BC formats.
 TEST_P(CompressedTextureBCFormatTest, CopyMultiple2DArrayLayers) {
-    // TODO(jiawei.shao@intel.com): find out why this test fails on Windows Intel OpenGL drivers.
+    // TODO(crbug.com/dawn/815): find out why this test fails on Windows Intel OpenGL drivers.
     DAWN_SUPPRESS_TEST_IF(IsIntel() && IsOpenGL() && IsWindows());
 
     DAWN_TEST_UNSUPPORTED_IF(!IsBCFormatSupported());
@@ -1120,7 +1118,6 @@
     queue.Submit(1, &commands);
 }
 
-// TODO(jiawei.shao@intel.com): support BC formats on OpenGL backend
 DAWN_INSTANTIATE_TEST(CompressedTextureBCFormatTest,
                       D3D12Backend(),
                       MetalBackend(),
diff --git a/src/tests/end2end/CopyTests.cpp b/src/tests/end2end/CopyTests.cpp
index d4d8e01..9befdc7 100644
--- a/src/tests/end2end/CopyTests.cpp
+++ b/src/tests/end2end/CopyTests.cpp
@@ -59,7 +59,7 @@
         return textureData;
     }
 
-    // TODO(jiawei.shao@intel.com): remove this function when all the tests in this file support
+    // TODO(crbug.com/dawn/818): remove this function when all the tests in this file support
     // testing arbitrary formats.
     static std::vector<RGBA8> GetExpectedTextureDataRGBA8(
         const utils::TextureDataCopyLayout& layout) {
@@ -132,7 +132,7 @@
                 const BufferSpec& bufferSpec,
                 const wgpu::Extent3D& copySize,
                 wgpu::TextureDimension dimension = wgpu::TextureDimension::e2D) {
-        // TODO(jiawei.shao@intel.com): support testing arbitrary formats
+        // TODO(crbug.com/dawn/818): support testing arbitrary formats
         ASSERT_EQ(kDefaultFormat, textureSpec.format);
 
         const uint32_t bytesPerTexel = utils::GetTexelBlockSizeInBytes(textureSpec.format);
@@ -244,7 +244,7 @@
                 const BufferSpec& bufferSpec,
                 const wgpu::Extent3D& copySize,
                 wgpu::TextureDimension dimension = wgpu::TextureDimension::e2D) {
-        // TODO(jiawei.shao@intel.com): support testing arbitrary formats
+        // TODO(crbug.com/dawn/818): support testing arbitrary formats
         ASSERT_EQ(kDefaultFormat, textureSpec.format);
         // Create a buffer of size `size` and populate it with data
         const uint32_t bytesPerTexel = utils::GetTexelBlockSizeInBytes(textureSpec.format);
@@ -2008,7 +2008,7 @@
 // texture formats. See http://crbug.com/1161355 for more details.
 TEST_P(CopyTests_T2T, CopyFromNonZeroMipLevelWithTexelBlockSizeLessThan4Bytes) {
     // This test can pass on the Windows Intel Vulkan driver version 27.20.100.9168.
-    // TODO(jiawei.shao@intel.com): enable this test on Intel Vulkan drivers after the upgrade of
+    // TODO(crbug.com/dawn/819): enable this test on Intel Vulkan drivers after the upgrade of
     // try bots.
     DAWN_SUPPRESS_TEST_IF(IsVulkan() && IsWindows() && IsIntel());
 
diff --git a/src/tests/end2end/DepthBiasTests.cpp b/src/tests/end2end/DepthBiasTests.cpp
index 2c07dc9..b18f181 100644
--- a/src/tests/end2end/DepthBiasTests.cpp
+++ b/src/tests/end2end/DepthBiasTests.cpp
@@ -312,7 +312,7 @@
                      0.25f * (1 << 25), 0, 0);
 
     // Only the bottom left quad has colors. 0.5 quad > 0.4 clear.
-    // TODO(enrico.galli@intel.com): Switch to depth sampling once feature has been enabled.
+    // TODO(crbug.com/dawn/820): Switch to depth sampling once feature has been enabled.
     std::vector<RGBA8> expected = {
         RGBA8::kRed, RGBA8::kRed,  //
         RGBA8::kRed, RGBA8::kRed,  //
@@ -333,7 +333,7 @@
 
     // Since we cleared with a depth of 0.4 and clamped bias at 0.4, the depth test will fail. 0.25
     // + 0.125 < 0.4 clear.
-    // TODO(enrico.galli@intel.com): Switch to depth sampling once feature has been enabled.
+    // TODO(crbug.com/dawn/820): Switch to depth sampling once feature has been enabled.
     std::vector<RGBA8> zero = {
         RGBA8::kZero, RGBA8::kZero,  //
         RGBA8::kZero, RGBA8::kZero,  //
@@ -348,7 +348,7 @@
     RunDepthBiasTest(wgpu::TextureFormat::Depth24PlusStencil8, 0.4f, QuadAngle::TiltedX, 0, 1, 0);
 
     // Only the top half of the quad has a depth > 0.4 clear
-    // TODO(enrico.galli@intel.com): Switch to depth sampling once feature has been enabled.
+    // TODO(crbug.com/dawn/820): Switch to depth sampling once feature has been enabled.
     std::vector<RGBA8> expected = {
         RGBA8::kRed, RGBA8::kRed,    //
         RGBA8::kZero, RGBA8::kZero,  //
diff --git a/src/tests/end2end/DepthStencilCopyTests.cpp b/src/tests/end2end/DepthStencilCopyTests.cpp
index a6cd449..bd19ac9 100644
--- a/src/tests/end2end/DepthStencilCopyTests.cpp
+++ b/src/tests/end2end/DepthStencilCopyTests.cpp
@@ -215,7 +215,7 @@
         uploadBufferDesc.usage = wgpu::BufferUsage::CopySrc;
         uploadBufferDesc.mappedAtCreation = true;
 
-        // TODO(enga): Use WriteTexture when implemented on OpenGL.
+        // TODO(crbug.com/dawn/822): Use WriteTexture when implemented on OpenGL.
         wgpu::Buffer uploadBuffer = device.CreateBuffer(&uploadBufferDesc);
         uint8_t* dst = static_cast<uint8_t*>(uploadBuffer.GetMappedRange());
         float* src = expected.data();
@@ -269,7 +269,7 @@
         depthStencil->depthCompare = wgpu::CompareFunction::Equal;
         pipelineDescriptor.cTargets[0].format = colorTexDesc.format;
 
-        // TODO(jiawei.shao@intel.com): The Intel Mesa Vulkan driver can't set gl_FragDepth unless
+        // TODO(crbug.com/dawn/821): The Intel Mesa Vulkan driver can't set gl_FragDepth unless
         // depthWriteEnabled == true. This either needs to be fixed in the driver or restricted by
         // the WebGPU API.
         depthStencil->depthWriteEnabled = true;
@@ -353,8 +353,8 @@
 
 // Test copying the non-zero mip, stencil-only aspect into a buffer.
 TEST_P(DepthStencilCopyTests, FromNonZeroMipStencilAspect) {
-    // TODO(enga): Figure out why this fails on MacOS Intel Iris.
-    // It passes on AMD Radeon Pro and Intel HD Graphics 630.
+    // TODO(crbug.com/dawn/704): Readback after clear via stencil copy does not work
+    // on some Intel drivers.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
 
     // TODO(crbug.com/dawn/667): Work around some platforms' inability to read back stencil.
@@ -396,8 +396,8 @@
 
 // Test copying both aspects in a T2T copy, then copying only stencil.
 TEST_P(DepthStencilCopyTests, T2TBothAspectsThenCopyStencil) {
-    // TODO(enga): Figure out why this fails on MacOS Intel Iris.
-    // It passes on AMD Radeon Pro and Intel HD Graphics 630.
+    // TODO(crbug.com/dawn/704): Readback after clear via stencil copy does not work
+    // on some Intel drivers.
     // Maybe has to do with the RenderAttachment usage. Notably, a later test
     // T2TBothAspectsThenCopyNonRenderableStencil does not use RenderAttachment and works correctly.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
@@ -449,8 +449,8 @@
 // Test that part of a non-renderable, non-zero mip stencil aspect can be copied. Notably,
 // this test has different behavior on some platforms than T2TBothAspectsThenCopyStencil.
 TEST_P(DepthStencilCopyTests, T2TBothAspectsThenCopyNonRenderableNonZeroMipStencil) {
-    // TODO(enga): Figure out why this fails on MacOS Intel Iris.
-    // It passes on AMD Radeon Pro and Intel HD Graphics 630.
+    /// TODO(crbug.com/dawn/704): Readback after clear via stencil copy does not work
+    // on some Intel drivers.
     // Maybe has to do with the non-zero mip. Notably, a previous test
     // T2TBothAspectsThenCopyNonRenderableStencil works correctly.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
@@ -539,8 +539,8 @@
 
 // Test copying both aspects in a T2T copy, then copying depth, then copying stencil
 TEST_P(DepthStencilCopyTests, T2TBothAspectsThenCopyDepthThenStencil) {
-    // TODO(enga): Figure out why this fails on MacOS Intel Iris.
-    // It passes on AMD Radeon Pro and Intel HD Graphics 630.
+    // TODO(crbug.com/dawn/704): Readback after clear via stencil copy does not work
+    // on some Intel drivers.
     // It seems like the depth readback copy mutates the stencil because the previous
     // test T2TBothAspectsThenCopyStencil passes.
     // T2TBothAspectsThenCopyStencilThenDepth which checks stencil first also passes.
@@ -583,8 +583,8 @@
     DAWN_TEST_UNSUPPORTED_IF(IsOpenGL());
     DAWN_TEST_UNSUPPORTED_IF(IsOpenGLES());
 
-    // TODO(enga): Figure out why this fails on MacOS Intel Iris.
-    // It passes on AMD Radeon Pro and Intel HD Graphics 630.
+    // TODO(crbug.com/dawn/704): Readback after clear via stencil copy does not work
+    // on some Intel drivers.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
 
     // Create a stencil texture
diff --git a/src/tests/end2end/DepthStencilSamplingTests.cpp b/src/tests/end2end/DepthStencilSamplingTests.cpp
index f877cee..1b7e584 100644
--- a/src/tests/end2end/DepthStencilSamplingTests.cpp
+++ b/src/tests/end2end/DepthStencilSamplingTests.cpp
@@ -192,8 +192,8 @@
                 return textureSampleCompare(tex, samp, vec2<f32>(0.5, 0.5), uniforms.compareRef);
             })");
 
-        // TODO(dawn:367): Cannot use GetBindGroupLayout for comparison samplers without shader
-        // reflection data.
+        // TODO(crbug.com/dawn/367): Cannot use GetBindGroupLayout for comparison samplers without
+        // shader reflection data.
         wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
             device, {{0, wgpu::ShaderStage::Fragment, wgpu::SamplerBindingType::Comparison},
                      {1, wgpu::ShaderStage::Fragment, wgpu::TextureSampleType::Depth},
@@ -227,7 +227,7 @@
                 samplerResult.value = textureSampleCompare(tex, samp, vec2<f32>(0.5, 0.5), uniforms.compareRef);
             })");
 
-        // TODO(dawn:367): Cannot use GetBindGroupLayout without shader reflection data.
+        // TODO(crbug.com/dawn/367): Cannot use GetBindGroupLayout without shader reflection data.
         wgpu::BindGroupLayout bgl = utils::MakeBindGroupLayout(
             device, {{0, wgpu::ShaderStage::Compute, wgpu::SamplerBindingType::Comparison},
                      {1, wgpu::ShaderStage::Compute, wgpu::TextureSampleType::Depth},
diff --git a/src/tests/end2end/IOSurfaceWrappingTests.cpp b/src/tests/end2end/IOSurfaceWrappingTests.cpp
index 23507f3..7145da7 100644
--- a/src/tests/end2end/IOSurfaceWrappingTests.cpp
+++ b/src/tests/end2end/IOSurfaceWrappingTests.cpp
@@ -159,10 +159,10 @@
 }
 
 // Test an error occurs if the descriptor dimension isn't 2D
-// TODO(cwallez@chromium.org): Reenable when 1D or 3D textures are implemented
-TEST_P(IOSurfaceValidationTests, DISABLED_InvalidTextureDimension) {
+// TODO(crbug.com/dawn/814): Test 1D textures when implemented
+TEST_P(IOSurfaceValidationTests, InvalidTextureDimension) {
     DAWN_TEST_UNSUPPORTED_IF(UsesWire());
-    descriptor.dimension = wgpu::TextureDimension::e2D;
+    descriptor.dimension = wgpu::TextureDimension::e3D;
 
     ASSERT_DEVICE_ERROR(wgpu::Texture texture =
                             WrapIOSurface(&descriptor, defaultIOSurface.get(), 0));
diff --git a/src/tests/end2end/MultisampledRenderingTests.cpp b/src/tests/end2end/MultisampledRenderingTests.cpp
index 8c6a2e6..963e370 100644
--- a/src/tests/end2end/MultisampledRenderingTests.cpp
+++ b/src/tests/end2end/MultisampledRenderingTests.cpp
@@ -418,7 +418,7 @@
 
 // Test doing MSAA resolve into multiple resolve targets works correctly.
 TEST_P(MultisampledRenderingTest, ResolveIntoMultipleResolveTargets) {
-    // TODO(dawn:462): Investigate backend validation failure.
+    // TODO(dawn:462): Issue in the D3D12 validation layers.
     DAWN_SUPPRESS_TEST_IF(IsD3D12() && IsNvidia() && IsBackendValidationEnabled());
 
     wgpu::TextureView multisampledColorView2 =
@@ -496,7 +496,7 @@
 
 // Test using a layer of a 2D texture as resolve target works correctly.
 TEST_P(MultisampledRenderingTest, ResolveIntoOneMipmapLevelOf2DTexture) {
-    // TODO(dawn:462): Investigate backend validation failure.
+    // TODO(dawn:462): Issue in the D3D12 validation layers.
     DAWN_SUPPRESS_TEST_IF(IsD3D12() && IsBackendValidationEnabled());
 
     constexpr uint32_t kBaseMipLevel = 2;
@@ -534,7 +534,7 @@
 
 // Test using a level or a layer of a 2D array texture as resolve target works correctly.
 TEST_P(MultisampledRenderingTest, ResolveInto2DArrayTexture) {
-    // TODO(dawn:462): Investigate backend validation failure.
+    // TODO(dawn:462): Issue in the D3D12 validation layers.
     DAWN_SUPPRESS_TEST_IF(IsD3D12() && IsBackendValidationEnabled());
 
     wgpu::TextureView multisampledColorView2 =
@@ -762,7 +762,7 @@
     // supported on some platforms.
     DAWN_TEST_UNSUPPORTED_IF(HasToggleEnabled("disable_sample_variables"));
 
-    // TODO(cwallez@chromium.org): Fails on Metal / D3D12 because SPIRV-Cross produces bad shaders
+    // TODO(crbug.com/dawn/571): Fails on Metal / D3D12 because SPIRV-Cross produces bad shaders
     // for the SPIR-V outputted by Tint. Reenable once we use Tint's MSL / HLSL generators.
     DAWN_SUPPRESS_TEST_IF(IsD3D12() || IsMetal());
 
@@ -824,7 +824,7 @@
     // supported on some platforms.
     DAWN_TEST_UNSUPPORTED_IF(HasToggleEnabled("disable_sample_variables"));
 
-    // TODO(cwallez@chromium.org): Fails on Metal / D3D12 because SPIRV-Cross produces bad shaders
+    // TODO(crbug.com/dawn/571): Fails on Metal / D3D12 because SPIRV-Cross produces bad shaders
     // for the SPIR-V outputted by Tint. Reenable once we use Tint's MSL / HLSL generators.
     DAWN_SUPPRESS_TEST_IF(IsD3D12() || IsMetal());
 
diff --git a/src/tests/end2end/OpArrayLengthTests.cpp b/src/tests/end2end/OpArrayLengthTests.cpp
index 38bc6fb..c9d42f7 100644
--- a/src/tests/end2end/OpArrayLengthTests.cpp
+++ b/src/tests/end2end/OpArrayLengthTests.cpp
@@ -98,8 +98,8 @@
 
 // Test OpArrayLength in the compute stage
 TEST_P(OpArrayLengthTest, Compute) {
-    // TODO(cwallez@chromium.org): The computations for length() of unsized buffer is broken on
-    // Nvidia OpenGL. See https://bugs.chromium.org/p/dawn/issues/detail?id=197
+    // TODO(crbug.com/dawn/197): The computations for length() of unsized buffer is broken on
+    // Nvidia OpenGL.
     DAWN_SUPPRESS_TEST_IF(IsNvidia() && (IsOpenGL() || IsOpenGLES()));
 
     // Create a buffer to hold the result sizes and create a bindgroup for it.
@@ -155,8 +155,8 @@
 
 // Test OpArrayLength in the fragment stage
 TEST_P(OpArrayLengthTest, Fragment) {
-    // TODO(cwallez@chromium.org): The computations for length() of unsized buffer is broken on
-    // Nvidia OpenGL. See https://bugs.chromium.org/p/dawn/issues/detail?id=197
+    // TODO(crbug.com/dawn/197): The computations for length() of unsized buffer is broken on
+    // Nvidia OpenGL.
     DAWN_SUPPRESS_TEST_IF(IsNvidia() && (IsOpenGL() || IsOpenGLES()));
 
     utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, 1, 1);
@@ -206,9 +206,8 @@
 
 // Test OpArrayLength in the vertex stage
 TEST_P(OpArrayLengthTest, Vertex) {
-    // TODO(cwallez@chromium.org): The computations for length() of unsized buffer is broken on
-    // Nvidia OpenGL. Also failing on all GLES (NV, Intel, SwANGLE). See
-    // https://bugs.chromium.org/p/dawn/issues/detail?id=197
+    // TODO(crbug.com/dawn/197): The computations for length() of unsized buffer is broken on
+    // Nvidia OpenGL. Also failing on all GLES (NV, Intel, SwANGLE).
     DAWN_SUPPRESS_TEST_IF(IsNvidia() && IsOpenGL());
     DAWN_SUPPRESS_TEST_IF(IsOpenGLES());
 
diff --git a/src/tests/end2end/QueryTests.cpp b/src/tests/end2end/QueryTests.cpp
index bd3a6ec..d6c5a75 100644
--- a/src/tests/end2end/QueryTests.cpp
+++ b/src/tests/end2end/QueryTests.cpp
@@ -760,8 +760,8 @@
     // the issue is fixed.
     DAWN_SUPPRESS_TEST_IF(IsWindows() && IsVulkan() && IsIntel());
 
-    // TODO(hao.x.li@intel.com): Crash occurs if we only call WriteTimestamp in a command encoder
-    // without any copy commands on Metal on AMD GPU. See https://crbug.com/dawn/545.
+    // TODO(crbug.com/dawn/545): Crash occurs if we only call WriteTimestamp in a command encoder
+    // without any copy commands on Metal on AMD GPU.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsAMD());
 
     constexpr uint32_t kQueryCount = 2;
diff --git a/src/tests/end2end/QueueTests.cpp b/src/tests/end2end/QueueTests.cpp
index b21c397..e151611 100644
--- a/src/tests/end2end/QueueTests.cpp
+++ b/src/tests/end2end/QueueTests.cpp
@@ -112,8 +112,7 @@
     // fails the test. Since GPUs may or may not complete by then, this test must be disabled OR
     // modified to be well-below the timeout limit.
 
-    // TODO(https://bugs.chromium.org/p/dawn/issues/detail?id=228): Re-enable
-    // once the issue with Metal on 10.14.6 is fixed.
+    // TODO(crbug.com/dawn/228): Re-enable once the issue with Metal on 10.14.6 is fixed.
     DAWN_SUPPRESS_TEST_IF(IsMacOS() && IsIntel() && IsMetal());
 
     // The Vulkan Validation Layers' memory barrier validation keeps track of every range written
diff --git a/src/tests/end2end/ShaderFloat16Tests.cpp b/src/tests/end2end/ShaderFloat16Tests.cpp
index d728334..73427bd 100644
--- a/src/tests/end2end/ShaderFloat16Tests.cpp
+++ b/src/tests/end2end/ShaderFloat16Tests.cpp
@@ -50,12 +50,10 @@
     wgpu::Buffer bufferIn = utils::CreateBufferFromData(device, &bufferInData, sizeof(bufferInData),
                                                         wgpu::BufferUsage::Storage);
 
-    // TODO(xinghua.cao@intel.com): the zero for padding is required now. No need to
-    // createBufferFromData once buffer lazy-zero-init is done.
-    uint16_t bufferOutData[] = {Float32ToFloat16(0.0), Float32ToFloat16(0.0)};
-    wgpu::Buffer bufferOut =
-        utils::CreateBufferFromData(device, &bufferOutData, sizeof(bufferOutData),
-                                    wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc);
+    wgpu::BufferDescriptor bufferDesc;
+    bufferDesc.size = 2 * sizeof(uint16_t);
+    bufferDesc.usage = wgpu::BufferUsage::Storage | wgpu::BufferUsage::CopySrc;
+    wgpu::Buffer bufferOut = device.CreateBuffer(&bufferDesc);
 
     // SPIR-V ASM produced by glslang for the following fragment shader:
     //
@@ -157,7 +155,7 @@
                                                      {
                                                          {0, uniformBuffer, 0, sizeof(uniformData)},
                                                          {1, bufferIn, 0, sizeof(bufferInData)},
-                                                         {2, bufferOut, 0, sizeof(bufferOutData)},
+                                                         {2, bufferOut},
                                                      });
 
     wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
diff --git a/src/tests/end2end/StorageTextureTests.cpp b/src/tests/end2end/StorageTextureTests.cpp
index bdc0fbf..0ab4a0a 100644
--- a/src/tests/end2end/StorageTextureTests.cpp
+++ b/src/tests/end2end/StorageTextureTests.cpp
@@ -552,8 +552,6 @@
 
         wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
 
-        // TODO(jiawei.shao@intel.com): remove the render attachment when Dawn supports beginning a
-        // render pass with no attachments.
         wgpu::Texture dummyOutputTexture =
             CreateTexture(kRenderAttachmentFormat,
                           wgpu::TextureUsage::RenderAttachment | wgpu::TextureUsage::CopySrc, 1, 1);
diff --git a/src/tests/end2end/TextureFormatTests.cpp b/src/tests/end2end/TextureFormatTests.cpp
index dd0d5f6..57d125c 100644
--- a/src/tests/end2end/TextureFormatTests.cpp
+++ b/src/tests/end2end/TextureFormatTests.cpp
@@ -786,9 +786,6 @@
     // This format is not renderable.
 }
 
-// TODO(cwallez@chromium.org): Add tests for depth-stencil formats when we know if they are copyable
-// in WebGPU.
-
 DAWN_INSTANTIATE_TEST(TextureFormatTest,
                       D3D12Backend(),
                       MetalBackend(),
diff --git a/src/tests/end2end/TextureZeroInitTests.cpp b/src/tests/end2end/TextureZeroInitTests.cpp
index f8ca3cb..3f2e8ee 100644
--- a/src/tests/end2end/TextureZeroInitTests.cpp
+++ b/src/tests/end2end/TextureZeroInitTests.cpp
@@ -586,7 +586,8 @@
 
 // Test that clear state is tracked independently for depth/stencil textures.
 TEST_P(TextureZeroInitTest, IndependentDepthStencilLoadAfterDiscard) {
-    // TODO(enga): Figure out why this fails on Metal Intel.
+    // TODO(crbug.com/dawn/704): Readback after clear via stencil copy does not work
+    // on some Intel drivers.
     DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
 
     wgpu::TextureDescriptor depthStencilDescriptor = CreateTextureDescriptor(
diff --git a/src/tests/end2end/VertexFormatTests.cpp b/src/tests/end2end/VertexFormatTests.cpp
index 18fe997..68f39ec 100644
--- a/src/tests/end2end/VertexFormatTests.cpp
+++ b/src/tests/end2end/VertexFormatTests.cpp
@@ -49,6 +49,9 @@
     void SetUp() override {
         DawnTest::SetUp();
 
+        // TODO(crbug.com/dawn/259): Failing because of a SPIRV-Cross issue.
+        DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
+
         renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
     }
 
@@ -398,10 +401,6 @@
 };
 
 TEST_P(VertexFormatTest, Uint8x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint8_t> vertexData = {
         std::numeric_limits<uint8_t>::max(),
         0,
@@ -425,10 +424,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint8x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint8_t> vertexData = {
         std::numeric_limits<uint8_t>::max(),
         0,
@@ -448,10 +443,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint8x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int8_t> vertexData = {
         std::numeric_limits<int8_t>::max(),
         0,
@@ -475,10 +466,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint8x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int8_t> vertexData = {
         std::numeric_limits<int8_t>::max(),
         0,
@@ -498,10 +485,6 @@
 }
 
 TEST_P(VertexFormatTest, Unorm8x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint8_t> vertexData = {
         std::numeric_limits<uint8_t>::max(),
         std::numeric_limits<uint8_t>::min(),
@@ -528,10 +511,6 @@
 }
 
 TEST_P(VertexFormatTest, Unorm8x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint8_t> vertexData = {std::numeric_limits<uint8_t>::max(),
                                        std::numeric_limits<uint8_t>::min(),
                                        0,
@@ -549,10 +528,6 @@
 }
 
 TEST_P(VertexFormatTest, Snorm8x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int8_t> vertexData = {
         std::numeric_limits<int8_t>::max(),
         std::numeric_limits<int8_t>::min(),
@@ -581,10 +556,6 @@
 }
 
 TEST_P(VertexFormatTest, Snorm8x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int8_t> vertexData = {std::numeric_limits<int8_t>::max(),
                                       std::numeric_limits<int8_t>::min(),
                                       0,
@@ -602,10 +573,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint16x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint16_t> vertexData = {std::numeric_limits<uint16_t>::max(),
                                         0,
                                         std::numeric_limits<uint16_t>::min(),
@@ -617,10 +584,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint16x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint16_t> vertexData = {
         std::numeric_limits<uint16_t>::max(),
         std::numeric_limits<uint8_t>::max(),
@@ -640,10 +603,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint16x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int16_t> vertexData = {std::numeric_limits<int16_t>::max(),
                                        0,
                                        std::numeric_limits<int16_t>::min(),
@@ -655,10 +614,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint16x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int16_t> vertexData = {
         std::numeric_limits<int16_t>::max(),
         0,
@@ -678,10 +633,6 @@
 }
 
 TEST_P(VertexFormatTest, Unorm16x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint16_t> vertexData = {std::numeric_limits<uint16_t>::max(),
                                         std::numeric_limits<uint16_t>::min(),
                                         std::numeric_limits<uint16_t>::max() / 2u,
@@ -693,10 +644,6 @@
 }
 
 TEST_P(VertexFormatTest, Unorm16x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint16_t> vertexData = {std::numeric_limits<uint16_t>::max(),
                                         std::numeric_limits<uint16_t>::min(),
                                         0,
@@ -714,10 +661,6 @@
 }
 
 TEST_P(VertexFormatTest, Snorm16x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int16_t> vertexData = {std::numeric_limits<int16_t>::max(),
                                        std::numeric_limits<int16_t>::min(),
                                        std::numeric_limits<int16_t>::max() / 2,
@@ -729,10 +672,6 @@
 }
 
 TEST_P(VertexFormatTest, Snorm16x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int16_t> vertexData = {std::numeric_limits<int16_t>::max(),
                                        std::numeric_limits<int16_t>::min(),
                                        0,
@@ -750,10 +689,6 @@
 }
 
 TEST_P(VertexFormatTest, Float16x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     // Fails on NVIDIA's Vulkan drivers on CQ but passes locally.
     DAWN_SUPPRESS_TEST_IF(IsVulkan() && IsNvidia());
 
@@ -764,10 +699,6 @@
 }
 
 TEST_P(VertexFormatTest, Float16x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     // Fails on NVIDIA's Vulkan drivers on CQ but passes locally.
     DAWN_SUPPRESS_TEST_IF(IsVulkan() && IsNvidia());
 
@@ -778,10 +709,6 @@
 }
 
 TEST_P(VertexFormatTest, Float32) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<float> vertexData = {1.3f, +0.0f, -0.0f};
 
     DoVertexFormatTest(wgpu::VertexFormat::Float32, vertexData, vertexData);
@@ -792,10 +719,6 @@
 }
 
 TEST_P(VertexFormatTest, Float32x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     // Fails on NVIDIA's Vulkan drivers on CQ but passes locally.
     DAWN_SUPPRESS_TEST_IF(IsVulkan() && IsNvidia());
 
@@ -805,10 +728,6 @@
 }
 
 TEST_P(VertexFormatTest, Float32x3) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     // Fails on NVIDIA's Vulkan drivers on CQ but passes locally.
     DAWN_SUPPRESS_TEST_IF(IsVulkan() && IsNvidia());
 
@@ -820,10 +739,6 @@
 }
 
 TEST_P(VertexFormatTest, Float32x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<float> vertexData = {
         19.2f, -19.3f, +0.0f, 1.0f, -0.0f, 1.0f, 1.3f, -1.0f, 13.078f, 21.1965f, -1.1f, -1.2f,
     };
@@ -832,10 +747,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint32) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint32_t> vertexData = {std::numeric_limits<uint32_t>::max(),
                                         std::numeric_limits<uint16_t>::max(),
                                         std::numeric_limits<uint8_t>::max()};
@@ -844,10 +755,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint32x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint32_t> vertexData = {std::numeric_limits<uint32_t>::max(), 32,
                                         std::numeric_limits<uint16_t>::max(), 64,
                                         std::numeric_limits<uint8_t>::max(),  128};
@@ -856,10 +763,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint32x3) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint32_t> vertexData = {std::numeric_limits<uint32_t>::max(), 32,   64,
                                         std::numeric_limits<uint16_t>::max(), 164,  128,
                                         std::numeric_limits<uint8_t>::max(),  1283, 256};
@@ -868,10 +771,6 @@
 }
 
 TEST_P(VertexFormatTest, Uint32x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<uint32_t> vertexData = {std::numeric_limits<uint32_t>::max(), 32,   64,  5460,
                                         std::numeric_limits<uint16_t>::max(), 164,  128, 0,
                                         std::numeric_limits<uint8_t>::max(),  1283, 256, 4567};
@@ -880,10 +779,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint32) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int32_t> vertexData = {std::numeric_limits<int32_t>::max(),
                                        std::numeric_limits<int32_t>::min(),
                                        std::numeric_limits<int8_t>::max()};
@@ -892,10 +787,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint32x2) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int32_t> vertexData = {
         std::numeric_limits<int32_t>::max(), std::numeric_limits<int32_t>::min(),
         std::numeric_limits<int16_t>::max(), std::numeric_limits<int16_t>::min(),
@@ -905,10 +796,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint32x3) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int32_t> vertexData = {
         std::numeric_limits<int32_t>::max(), std::numeric_limits<int32_t>::min(), 64,
         std::numeric_limits<int16_t>::max(), std::numeric_limits<int16_t>::min(), 128,
@@ -918,10 +805,6 @@
 }
 
 TEST_P(VertexFormatTest, Sint32x4) {
-    // TODO(cwallez@chromium.org): Failing because of a SPIRV-Cross issue.
-    // See http://crbug.com/dawn/259
-    DAWN_SUPPRESS_TEST_IF(IsMetal() && IsIntel());
-
     std::vector<int32_t> vertexData = {
         std::numeric_limits<int32_t>::max(), std::numeric_limits<int32_t>::min(), 64,   -5460,
         std::numeric_limits<int16_t>::max(), std::numeric_limits<int16_t>::min(), -128, 0,
