BufferBase: Split validation in helper methods
diff --git a/src/backend/Buffer.cpp b/src/backend/Buffer.cpp
index 296f3fe..180823f 100644
--- a/src/backend/Buffer.cpp
+++ b/src/backend/Buffer.cpp
@@ -78,13 +78,7 @@
     }
 
     void BufferBase::SetSubData(uint32_t start, uint32_t count, const uint8_t* data) {
-        if (start + count > GetSize()) {
-            mDevice->HandleError("Buffer subdata out of range");
-            return;
-        }
-
-        if (!(mAllowedUsage & dawn::BufferUsageBit::TransferDst)) {
-            mDevice->HandleError("Buffer needs the transfer dst usage bit");
+        if (mDevice->ConsumedError(ValidateSetSubData(start, count))) {
             return;
         }
 
@@ -95,7 +89,7 @@
                                   uint32_t size,
                                   dawnBufferMapReadCallback callback,
                                   dawnCallbackUserdata userdata) {
-        if (!ValidateMapBase(start, size, dawn::BufferUsageBit::MapRead)) {
+        if (mDevice->ConsumedError(ValidateMap(start, size, dawn::BufferUsageBit::MapRead))) {
             callback(DAWN_BUFFER_MAP_ASYNC_STATUS_ERROR, nullptr, userdata);
             return;
         }
@@ -115,7 +109,7 @@
                                    uint32_t size,
                                    dawnBufferMapWriteCallback callback,
                                    dawnCallbackUserdata userdata) {
-        if (!ValidateMapBase(start, size, dawn::BufferUsageBit::MapWrite)) {
+        if (mDevice->ConsumedError(ValidateMap(start, size, dawn::BufferUsageBit::MapWrite))) {
             callback(DAWN_BUFFER_MAP_ASYNC_STATUS_ERROR, nullptr, userdata);
             return;
         }
@@ -132,8 +126,7 @@
     }
 
     void BufferBase::Unmap() {
-        if (!mIsMapped) {
-            mDevice->HandleError("Buffer wasn't mapped");
+        if (mDevice->ConsumedError(ValidateUnmap())) {
             return;
         }
 
@@ -148,26 +141,44 @@
         mMapUserdata = 0;
     }
 
-    bool BufferBase::ValidateMapBase(uint32_t start,
-                                     uint32_t size,
-                                     dawn::BufferUsageBit requiredUsage) {
+    MaybeError BufferBase::ValidateSetSubData(uint32_t start, uint32_t count) const {
+        // TODO(cwallez@chromium.org): check for overflows.
+        if (start + count > GetSize()) {
+            DAWN_RETURN_ERROR("Buffer subdata out of range");
+        }
+
+        if (!(mAllowedUsage & dawn::BufferUsageBit::TransferDst)) {
+            DAWN_RETURN_ERROR("Buffer needs the transfer dst usage bit");
+        }
+
+        return {};
+    }
+
+    MaybeError BufferBase::ValidateMap(uint32_t start,
+                                       uint32_t size,
+                                       dawn::BufferUsageBit requiredUsage) const {
         // TODO(cwallez@chromium.org): check for overflows.
         if (start + size > GetSize()) {
-            mDevice->HandleError("Buffer map read out of range");
-            return false;
+            DAWN_RETURN_ERROR("Buffer map read out of range");
         }
 
         if (mIsMapped) {
-            mDevice->HandleError("Buffer already mapped");
-            return false;
+            DAWN_RETURN_ERROR("Buffer already mapped");
         }
 
         if (!(mAllowedUsage & requiredUsage)) {
-            mDevice->HandleError("Buffer needs the correct map usage bit");
-            return false;
+            DAWN_RETURN_ERROR("Buffer needs the correct map usage bit");
         }
 
-        return true;
+        return {};
+    }
+
+    MaybeError BufferBase::ValidateUnmap() const {
+        if (!mIsMapped) {
+            DAWN_RETURN_ERROR("Buffer wasn't mapped");
+        }
+
+        return {};
     }
 
     // BufferBuilder
diff --git a/src/backend/Buffer.h b/src/backend/Buffer.h
index 8e1f47c..65cc450 100644
--- a/src/backend/Buffer.h
+++ b/src/backend/Buffer.h
@@ -16,6 +16,7 @@
 #define BACKEND_BUFFER_H_
 
 #include "backend/Builder.h"
+#include "backend/Error.h"
 #include "backend/Forward.h"
 #include "backend/RefCounted.h"
 
@@ -66,7 +67,11 @@
         virtual void MapWriteAsyncImpl(uint32_t serial, uint32_t start, uint32_t size) = 0;
         virtual void UnmapImpl() = 0;
 
-        bool ValidateMapBase(uint32_t start, uint32_t size, dawn::BufferUsageBit requiredUsage);
+        MaybeError ValidateSetSubData(uint32_t start, uint32_t count) const;
+        MaybeError ValidateMap(uint32_t start,
+                               uint32_t size,
+                               dawn::BufferUsageBit requiredUsage) const;
+        MaybeError ValidateUnmap() const;
 
         DeviceBase* mDevice;
         uint32_t mSize;