Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1901)

Unified Diff: content/public/common/manifest_struct_traits.cc

Issue 1913043002: Convert ManifestManager IPCs to Mojo. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/public/common/manifest_struct_traits.cc
diff --git a/content/public/common/manifest_struct_traits.cc b/content/public/common/manifest_struct_traits.cc
new file mode 100644
index 0000000000000000000000000000000000000000..9509023f7c5a6b98676975dc194bf6589007207a
--- /dev/null
+++ b/content/public/common/manifest_struct_traits.cc
@@ -0,0 +1,121 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/public/common/manifest_struct_traits.h"
+
+namespace mojo {
+namespace {
+
+bool ValidateColor(int64_t color) {
+ if (color < std::numeric_limits<int32_t>::min() &&
+ color > std::numeric_limits<int32_t>::max() &&
+ color != content::Manifest::kInvalidOrMissingColor) {
+ return false;
+ }
+ return true;
+}
+
+// A wrapper around base::NullableString16 so a custom StringTraits
+// specialization can enforce maximum string length.
+struct TruncatedNullableString16 {
+ base::NullableString16 string;
+};
+
+} // namespace
+
+template <>
+struct StringTraits<TruncatedNullableString16> {
+ static void SetToNull(TruncatedNullableString16* output) {
+ output->string = base::NullableString16();
+ }
+
+ static bool Read(StringDataView input, TruncatedNullableString16* output) {
+ if (!StringTraits<base::NullableString16>::Read(input, &output->string))
+ return false;
+
+ return (output->string.is_null() ||
+ output->string.string().size() <=
+ content::Manifest::kMaxIPCStringLength);
+ }
+};
+
+bool StructTraits<blink::mojom::Manifest, content::Manifest>::Read(
+ blink::mojom::ManifestDataView data,
+ content::Manifest* out) {
+ TruncatedNullableString16 string;
+ if (!data.ReadName(&string))
+ return false;
+ out->name = string.string;
+
+ if (!data.ReadShortName(&string))
+ return false;
+ out->short_name = string.string;
+
+ if (!data.ReadGcmSenderId(&string))
+ return false;
+ out->gcm_sender_id = string.string;
+
+ if (!data.ReadStartUrl(&out->start_url))
+ return false;
+
+ if (!data.ReadIcons(&out->icons))
+ return false;
+
+ if (!data.ReadRelatedApplications(&out->related_applications))
+ return false;
+
+ out->prefer_related_applications = data.prefer_related_applications();
+ out->theme_color = data.theme_color();
+ if (!ValidateColor(out->theme_color))
+ return false;
+
+ out->background_color = data.background_color();
+ if (!ValidateColor(out->background_color))
+ return false;
+
+ out->display = static_cast<blink::WebDisplayMode>(data.display());
+ out->orientation =
+ static_cast<blink::WebScreenOrientationLockType>(data.orientation());
+
+ return true;
+}
+
+bool StructTraits<blink::mojom::ManifestIcon, content::Manifest::Icon>::Read(
+ blink::mojom::ManifestIconDataView data,
+ content::Manifest::Icon* out) {
+ if (!data.ReadSrc(&out->src))
+ return false;
+
+ TruncatedNullableString16 string;
+ if (!data.ReadType(&string))
+ return false;
+
+ out->type = string.string;
+
+ if (!data.ReadSizes(&out->sizes))
+ return false;
+
+ return true;
+}
+
+bool StructTraits<blink::mojom::RelatedApplication,
+ content::Manifest::RelatedApplication>::
+ Read(blink::mojom::RelatedApplicationDataView data,
+ content::Manifest::RelatedApplication* out) {
+ TruncatedNullableString16 string;
+ if (!data.ReadPlatform(&string))
+ return false;
+ out->platform = string.string;
+
+ if (!data.ReadUrl(&out->url))
+ return false;
+
+ if (!data.ReadId(&string))
+ return false;
+ out->id = string.string;
+
+ return true;
+}
+
+} // namespace mojo

Powered by Google App Engine
This is Rietveld 408576698