Commit 7b3867c7 authored by fsamuel's avatar fsamuel Committed by Commit bot

mojo ArrayTraits<T>::Resize returns bool indicating success

ArrayTraits<T>::Resize should return false and thus fail deserialization
if the array cannot be resized.

BUG=611802
TBR=ben@chromium.org
CQ_INCLUDE_TRYBOTS=tryserver.chromium.linux:linux_optional_gpu_tests_rel;tryserver.chromium.mac:mac_optional_gpu_tests_rel;tryserver.chromium.win:win_optional_gpu_tests_rel

Review-Url: https://codereview.chromium.org/2045723002
Cr-Commit-Position: refs/heads/master@{#398251}
parent 1972027e
......@@ -32,8 +32,8 @@ const int8_t& ArrayTraits<MailboxName>::GetAt(const MailboxName& b, size_t i) {
}
// static
void ArrayTraits<MailboxName>::Resize(MailboxName& b, size_t size) {
DCHECK(GL_MAILBOX_SIZE_CHROMIUM == size);
bool ArrayTraits<MailboxName>::Resize(MailboxName& b, size_t size) {
return GL_MAILBOX_SIZE_CHROMIUM == size;
}
// static
......
......@@ -26,7 +26,7 @@ struct ArrayTraits<MailboxName> {
static const int8_t* GetData(const MailboxName& b);
static int8_t& GetAt(MailboxName& b, size_t i);
static const int8_t& GetAt(const MailboxName& b, size_t i);
static void Resize(MailboxName& b, size_t size);
static bool Resize(MailboxName& b, size_t size);
};
template <>
......
......@@ -32,7 +32,9 @@ namespace mojo {
// static T& GetAt(CustomArray<T>& input, size_t index);
// static const T& GetAt(const CustomArray<T>& input, size_t index);
//
// static void Resize(CustomArray<T>& input, size_t size);
// Returning false results in deserialization failure and causes the message
// pipe receiving it to be disconnected.
// static bool Resize(CustomArray<T>& input, size_t size);
// };
//
template <typename T>
......
......@@ -32,7 +32,10 @@ struct ArrayTraits<Array<T>> {
return input[index];
}
static void Resize(Array<T>& input, size_t size) { input.resize(size); }
static bool Resize(Array<T>& input, size_t size) {
input.resize(size);
return true;
}
};
} // namespace mojo
......
......@@ -42,7 +42,10 @@ struct ArrayTraits<std::vector<T>> {
return input[index];
}
static void Resize(std::vector<T>& input, size_t size) { input.resize(size); }
static bool Resize(std::vector<T>& input, size_t size) {
input.resize(size);
return true;
}
};
} // namespace mojo
......
......@@ -29,7 +29,10 @@ struct ArrayTraits<WTFArray<U>> {
return input[index];
}
static void Resize(WTFArray<U>& input, size_t size) { input.resize(size); }
static bool Resize(WTFArray<U>& input, size_t size) {
input.resize(size);
return true;
}
};
} // namespace mojo
......
......@@ -36,7 +36,10 @@ struct ArrayTraits<WTF::Vector<U>> {
return input[index];
}
static void Resize(WTF::Vector<U>& input, size_t size) { input.resize(size); }
static bool Resize(WTF::Vector<U>& input, size_t size) {
input.resize(size);
return true;
}
};
} // namespace mojo
......
......@@ -137,7 +137,8 @@ struct ArraySerializer<MojomType,
static bool DeserializeElements(Data* input,
UserType* output,
SerializationContext* context) {
Traits::Resize(*output, input->size());
if (!Traits::Resize(*output, input->size()))
return false;
if (input->size()) {
auto data = CallGetDataIfExists<Traits>(*output);
if (data) {
......@@ -188,7 +189,8 @@ struct ArraySerializer<MojomType,
static bool DeserializeElements(Data* input,
UserType* output,
SerializationContext* context) {
Traits::Resize(*output, input->size());
if (!Traits::Resize(*output, input->size()))
return false;
for (size_t i = 0; i < input->size(); ++i)
Traits::GetAt(*output, i) = input->at(i);
return true;
......@@ -240,7 +242,8 @@ struct ArraySerializer<MojomType,
UserType* output,
SerializationContext* context) {
using HandleType = typename Element::RawHandleType;
Traits::Resize(*output, input->size());
if (!Traits::Resize(*output, input->size()))
return false;
for (size_t i = 0; i < input->size(); ++i) {
Traits::GetAt(*output, i) = MakeScopedHandle(
HandleType(context->handles.TakeHandle(input->at(i)).value()));
......@@ -299,7 +302,8 @@ struct ArraySerializer<MojomType,
UserType* output,
SerializationContext* context) {
bool success = true;
Traits::Resize(*output, input->size());
if (!Traits::Resize(*output, input->size()))
return false;
for (size_t i = 0; i < input->size(); ++i) {
// Note that we rely on complete deserialization taking place in order to
// transfer ownership of all encoded handles. Therefore we don't
......@@ -391,7 +395,8 @@ struct ArraySerializer<MojomType,
UserType* output,
SerializationContext* context) {
bool success = true;
Traits::Resize(*output, input->size());
if (!Traits::Resize(*output, input->size()))
return false;
for (size_t i = 0; i < input->size(); ++i) {
// Note that we rely on complete deserialization taking place in order to
// transfer ownership of all encoded handles. Therefore we don't
......
......@@ -138,8 +138,8 @@ const uint8_t& ArrayTraits<BitmapBuffer>::GetAt(const BitmapBuffer& b,
}
// static
void ArrayTraits<BitmapBuffer>::Resize(BitmapBuffer& b, size_t size) {
CHECK_EQ(size, b.size);
bool ArrayTraits<BitmapBuffer>::Resize(BitmapBuffer& b, size_t size) {
return b.size == size;
}
// static
......
......@@ -26,7 +26,7 @@ struct ArrayTraits<BitmapBuffer> {
static const uint8_t* GetData(const BitmapBuffer& b);
static uint8_t& GetAt(BitmapBuffer& b, size_t i);
static const uint8_t& GetAt(const BitmapBuffer& b, size_t i);
static void Resize(BitmapBuffer& b, size_t size);
static bool Resize(BitmapBuffer& b, size_t size);
};
// Struct traits to use SkBitmap for skia::mojom::Bitmap in Chrome C++ code.
......
......@@ -211,11 +211,12 @@ ArrayTraits<InputCoordinateArray>::GetAt(const InputCoordinateArray& b,
}
// static
void ArrayTraits<InputCoordinateArray>::Resize(InputCoordinateArray& b,
bool ArrayTraits<InputCoordinateArray>::Resize(InputCoordinateArray& b,
size_t size) {
// TODO(fsamuel): We should update ArrayTraits<T>::Resize to return a bool.
CHECK_LE(size, ui::LatencyInfo::kMaxInputCoordinates);
if (size > ui::LatencyInfo::kMaxInputCoordinates)
return false;
b.size = size;
return true;
}
// static
......
......@@ -43,7 +43,7 @@ struct ArrayTraits<InputCoordinateArray> {
static const Element* GetData(const InputCoordinateArray& b);
static Element& GetAt(InputCoordinateArray& b, size_t i);
static const Element& GetAt(const InputCoordinateArray& b, size_t i);
static void Resize(InputCoordinateArray& b, size_t size);
static bool Resize(InputCoordinateArray& b, size_t size);
};
template <>
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment