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) { ...@@ -32,8 +32,8 @@ const int8_t& ArrayTraits<MailboxName>::GetAt(const MailboxName& b, size_t i) {
} }
// static // static
void ArrayTraits<MailboxName>::Resize(MailboxName& b, size_t size) { bool ArrayTraits<MailboxName>::Resize(MailboxName& b, size_t size) {
DCHECK(GL_MAILBOX_SIZE_CHROMIUM == size); return GL_MAILBOX_SIZE_CHROMIUM == size;
} }
// static // static
......
...@@ -26,7 +26,7 @@ struct ArrayTraits<MailboxName> { ...@@ -26,7 +26,7 @@ struct ArrayTraits<MailboxName> {
static const int8_t* GetData(const MailboxName& b); static const int8_t* GetData(const MailboxName& b);
static int8_t& GetAt(MailboxName& b, size_t i); static int8_t& GetAt(MailboxName& b, size_t i);
static const int8_t& GetAt(const 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 <> template <>
......
...@@ -32,7 +32,9 @@ namespace mojo { ...@@ -32,7 +32,9 @@ namespace mojo {
// static T& GetAt(CustomArray<T>& input, size_t index); // static T& GetAt(CustomArray<T>& input, size_t index);
// static const T& GetAt(const 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> template <typename T>
......
...@@ -32,7 +32,10 @@ struct ArrayTraits<Array<T>> { ...@@ -32,7 +32,10 @@ struct ArrayTraits<Array<T>> {
return input[index]; 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 } // namespace mojo
......
...@@ -42,7 +42,10 @@ struct ArrayTraits<std::vector<T>> { ...@@ -42,7 +42,10 @@ struct ArrayTraits<std::vector<T>> {
return input[index]; 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 } // namespace mojo
......
...@@ -29,7 +29,10 @@ struct ArrayTraits<WTFArray<U>> { ...@@ -29,7 +29,10 @@ struct ArrayTraits<WTFArray<U>> {
return input[index]; 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 } // namespace mojo
......
...@@ -36,7 +36,10 @@ struct ArrayTraits<WTF::Vector<U>> { ...@@ -36,7 +36,10 @@ struct ArrayTraits<WTF::Vector<U>> {
return input[index]; 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 } // namespace mojo
......
...@@ -137,7 +137,8 @@ struct ArraySerializer<MojomType, ...@@ -137,7 +137,8 @@ struct ArraySerializer<MojomType,
static bool DeserializeElements(Data* input, static bool DeserializeElements(Data* input,
UserType* output, UserType* output,
SerializationContext* context) { SerializationContext* context) {
Traits::Resize(*output, input->size()); if (!Traits::Resize(*output, input->size()))
return false;
if (input->size()) { if (input->size()) {
auto data = CallGetDataIfExists<Traits>(*output); auto data = CallGetDataIfExists<Traits>(*output);
if (data) { if (data) {
...@@ -188,7 +189,8 @@ struct ArraySerializer<MojomType, ...@@ -188,7 +189,8 @@ struct ArraySerializer<MojomType,
static bool DeserializeElements(Data* input, static bool DeserializeElements(Data* input,
UserType* output, UserType* output,
SerializationContext* context) { SerializationContext* context) {
Traits::Resize(*output, input->size()); if (!Traits::Resize(*output, input->size()))
return false;
for (size_t i = 0; i < input->size(); ++i) for (size_t i = 0; i < input->size(); ++i)
Traits::GetAt(*output, i) = input->at(i); Traits::GetAt(*output, i) = input->at(i);
return true; return true;
...@@ -240,7 +242,8 @@ struct ArraySerializer<MojomType, ...@@ -240,7 +242,8 @@ struct ArraySerializer<MojomType,
UserType* output, UserType* output,
SerializationContext* context) { SerializationContext* context) {
using HandleType = typename Element::RawHandleType; 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) { for (size_t i = 0; i < input->size(); ++i) {
Traits::GetAt(*output, i) = MakeScopedHandle( Traits::GetAt(*output, i) = MakeScopedHandle(
HandleType(context->handles.TakeHandle(input->at(i)).value())); HandleType(context->handles.TakeHandle(input->at(i)).value()));
...@@ -299,7 +302,8 @@ struct ArraySerializer<MojomType, ...@@ -299,7 +302,8 @@ struct ArraySerializer<MojomType,
UserType* output, UserType* output,
SerializationContext* context) { SerializationContext* context) {
bool success = true; 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) { for (size_t i = 0; i < input->size(); ++i) {
// Note that we rely on complete deserialization taking place in order to // Note that we rely on complete deserialization taking place in order to
// transfer ownership of all encoded handles. Therefore we don't // transfer ownership of all encoded handles. Therefore we don't
...@@ -391,7 +395,8 @@ struct ArraySerializer<MojomType, ...@@ -391,7 +395,8 @@ struct ArraySerializer<MojomType,
UserType* output, UserType* output,
SerializationContext* context) { SerializationContext* context) {
bool success = true; 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) { for (size_t i = 0; i < input->size(); ++i) {
// Note that we rely on complete deserialization taking place in order to // Note that we rely on complete deserialization taking place in order to
// transfer ownership of all encoded handles. Therefore we don't // transfer ownership of all encoded handles. Therefore we don't
......
...@@ -138,8 +138,8 @@ const uint8_t& ArrayTraits<BitmapBuffer>::GetAt(const BitmapBuffer& b, ...@@ -138,8 +138,8 @@ const uint8_t& ArrayTraits<BitmapBuffer>::GetAt(const BitmapBuffer& b,
} }
// static // static
void ArrayTraits<BitmapBuffer>::Resize(BitmapBuffer& b, size_t size) { bool ArrayTraits<BitmapBuffer>::Resize(BitmapBuffer& b, size_t size) {
CHECK_EQ(size, b.size); return b.size == size;
} }
// static // static
......
...@@ -26,7 +26,7 @@ struct ArrayTraits<BitmapBuffer> { ...@@ -26,7 +26,7 @@ struct ArrayTraits<BitmapBuffer> {
static const uint8_t* GetData(const BitmapBuffer& b); static const uint8_t* GetData(const BitmapBuffer& b);
static uint8_t& GetAt(BitmapBuffer& b, size_t i); static uint8_t& GetAt(BitmapBuffer& b, size_t i);
static const uint8_t& GetAt(const 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. // Struct traits to use SkBitmap for skia::mojom::Bitmap in Chrome C++ code.
......
...@@ -211,11 +211,12 @@ ArrayTraits<InputCoordinateArray>::GetAt(const InputCoordinateArray& b, ...@@ -211,11 +211,12 @@ ArrayTraits<InputCoordinateArray>::GetAt(const InputCoordinateArray& b,
} }
// static // static
void ArrayTraits<InputCoordinateArray>::Resize(InputCoordinateArray& b, bool ArrayTraits<InputCoordinateArray>::Resize(InputCoordinateArray& b,
size_t size) { size_t size) {
// TODO(fsamuel): We should update ArrayTraits<T>::Resize to return a bool. if (size > ui::LatencyInfo::kMaxInputCoordinates)
CHECK_LE(size, ui::LatencyInfo::kMaxInputCoordinates); return false;
b.size = size; b.size = size;
return true;
} }
// static // static
......
...@@ -43,7 +43,7 @@ struct ArrayTraits<InputCoordinateArray> { ...@@ -43,7 +43,7 @@ struct ArrayTraits<InputCoordinateArray> {
static const Element* GetData(const InputCoordinateArray& b); static const Element* GetData(const InputCoordinateArray& b);
static Element& GetAt(InputCoordinateArray& b, size_t i); static Element& GetAt(InputCoordinateArray& b, size_t i);
static const Element& GetAt(const 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 <> 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