blob: c6eaca56e48566953ce5e9bc78765059f54502c0 [file] [log] [blame]
// Copyright 2017 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.
module blink.mojom;
import "services/device/public/mojom/screen_orientation_lock_types.mojom";
import "mojo/public/mojom/base/string16.mojom";
import "third_party/blink/public/mojom/manifest/display_mode.mojom";
import "third_party/blink/public/mojom/manifest/capture_links.mojom";
import "ui/gfx/geometry/mojom/geometry.mojom";
import "url/mojom/url.mojom";
import "url/mojom/origin.mojom";
// The Manifest structure is an internal representation of the Manifest file
// described in the "Manifest for Web Application" document:
// http://w3c.github.io/manifest/
[JavaClassName="WebManifest"]
struct Manifest {
mojo_base.mojom.String16? name;
mojo_base.mojom.String16? short_name;
mojo_base.mojom.String16? description;
url.mojom.Url start_url;
DisplayMode display;
array<DisplayMode> display_override;
device.mojom.ScreenOrientationLockType orientation;
array<ManifestImageResource> icons;
array<ManifestImageResource> screenshots;
array<ManifestShortcutItem> shortcuts;
ManifestShareTarget? share_target;
// TODO(crbug.com/829689): This field is non-standard and part of a Chrome
// experiment. See:
// https://github.com/WICG/file-handling/blob/master/explainer.md
// As such, this field should not be exposed by default.
array<ManifestFileHandler> file_handlers;
// TODO(crbug.com/1019239): This is going into the mainline manifest spec,
// remove the TODO once that PR goes in.
// The URLProtocolHandler explainer can be found here:
// https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/master/URLProtocolHandler/explainer.md
array<ManifestProtocolHandler> protocol_handlers;
array<ManifestUrlHandler> url_handlers;
array<ManifestRelatedApplication> related_applications;
// A boolean that is used as a hint for the user agent to say that related
// applications should be preferred over the web application. False if missing
// or there is a parsing failure.
bool prefer_related_applications;
// TODO(https://crbug.com/657632): Numeric types are not nullable. =(
bool has_theme_color;
uint32 theme_color;
// TODO(https://crbug.com/657632): Numeric types are not nullable. =(
bool has_background_color;
uint32 background_color;
mojo_base.mojom.String16? gcm_sender_id;
url.mojom.Url scope;
// TODO(crbug.com/1163398): This field is non-standard and part of a Chrome
// experiment. See:
// https://github.com/WICG/sw-launch/blob/master/declarative_link_capturing.md#proposal
// As such, this field should not be exposed by default.
CaptureLinks capture_links;
};
// Structure representing a Shortcut Item per the Manifest specification, see:
// https://w3c.github.io/manifest/#shortcutitem-and-its-members
struct ManifestShortcutItem {
// name is required
mojo_base.mojom.String16 name;
mojo_base.mojom.String16? short_name;
mojo_base.mojom.String16? description;
// URL at which the shortcut can be found.
// MUST be a valid url. If a shortcut doesn't have a valid URL, it will not be
// successfully parsed, thus will not be represented in the Manifest.
url.mojom.Url url;
array<ManifestImageResource> icons;
};
// Structure representing an icon as per the Manifest specification, see:
// https://w3c.github.io/manifest/#dom-imageresource
struct ManifestImageResource {
enum Purpose {
ANY = 0,
MONOCHROME,
MASKABLE,
};
// MUST be a valid url. If an icon doesn't have a valid URL, it will not be
// successfully parsed, thus will not be represented in the Manifest.
url.mojom.Url src;
// The type can be any string and doesn't have to be a valid image MIME type
// at this point. It is up to the consumer of the object to check if the type
// matches a supported type.
mojo_base.mojom.String16? type;
// The special value "any" is represented by gfx::Size(0, 0).
array<gfx.mojom.Size> sizes;
// Never empty. Defaults to a vector with a single value, IconPurpose::ANY,
// if not explicitly specified in the manifest.
array<Purpose> purpose;
};
// Structure representing a share target file.
struct ManifestFileFilter {
mojo_base.mojom.String16? name;
// A sequence of accepted MIME types.
array<mojo_base.mojom.String16> accept;
};
// Structure representing a URL protocol handler.
struct ManifestProtocolHandler {
mojo_base.mojom.String16 protocol;
url.mojom.Url url;
};
struct ManifestUrlHandler {
url.mojom.Origin origin;
};
// Structure representing a related application.
struct ManifestRelatedApplication {
// The platform on which the application can be found. This can be any
// string, and is interpreted by the consumer of the object.
mojo_base.mojom.String16? platform;
// URL at which the application can be found. One of |url| or |id| must be
// present.
url.mojom.Url? url;
// An id which is used to represent the application on the platform. One of
// |url| or |id| must be present.
mojo_base.mojom.String16? id;
};
// Structure representing how a Web Share target fills query parameters of an
// incoming share. These fields contain the names of the query parameters that
// will hold the value of the corresponding share data.
struct ManifestShareTargetParams {
mojo_base.mojom.String16? title;
mojo_base.mojom.String16? text;
mojo_base.mojom.String16? url;
// An array of share target files, which is represented by two members:
// name and accept.
array<ManifestFileFilter>? files;
};
// Structure representing how a Web Share target handles an incoming share.
struct ManifestShareTarget {
// This enum corresponds to HTTP methods, where kGet corresponds to GET
// and kPost corresponds to POST.
enum Method {
kGet,
kPost,
};
// This enum corresponds to HTTP enctype, where kApplication corresponds
// to application/x-www-url-encoded and kMultipart corresponds to
// multipart/form-data.
enum Enctype {
kFormUrlEncoded,
kMultipartFormData,
};
// The URL that will be opened when the share target is invoked.
url.mojom.Url action;
// The method that specifies the HTTP request method for web share target.
Method method;
// The enctype that specifies how share data is encoded in a POST request.
// It is ignored when method is "GET".
Enctype enctype;
ManifestShareTargetParams params;
};
struct ManifestFileHandler {
// The URL that will be opened when the file handler is invoked.
url.mojom.Url action;
mojo_base.mojom.String16 name;
// A mapping of a MIME types to a corresponding list of file extensions.
map<mojo_base.mojom.String16, array<mojo_base.mojom.String16>> accept;
};
// Debug information for a parsed manifest.
struct ManifestDebugInfo {
array<ManifestError> errors;
string raw_manifest;
};
// An individual manifest parsing error.
struct ManifestError {
string message;
bool critical;
uint32 line;
uint32 column;
};