| // Copyright 2014 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. |
| |
| #ifndef THIRD_PARTY_BLINK_PUBLIC_COMMON_MANIFEST_MANIFEST_H_ |
| #define THIRD_PARTY_BLINK_PUBLIC_COMMON_MANIFEST_MANIFEST_H_ |
| |
| #include <stddef.h> |
| #include <stdint.h> |
| |
| #include <vector> |
| |
| #include "base/optional.h" |
| #include "base/strings/string16.h" |
| #include "services/device/public/mojom/screen_orientation_lock_types.mojom-shared.h" |
| #include "third_party/blink/public/common/common_export.h" |
| #include "third_party/blink/public/mojom/manifest/display_mode.mojom.h" |
| #include "third_party/blink/public/mojom/manifest/manifest.mojom-shared.h" |
| #include "third_party/skia/include/core/SkColor.h" |
| #include "ui/gfx/geometry/size.h" |
| #include "url/gurl.h" |
| #include "url/origin.h" |
| |
| namespace blink { |
| |
| // The Manifest structure is an internal representation of the Manifest file |
| // described in the "Manifest for Web Application" document: |
| // http://w3c.github.io/manifest/ |
| struct BLINK_COMMON_EXPORT Manifest { |
| // Structure representing an icon as per the Manifest specification, see: |
| // https://w3c.github.io/manifest/#dom-imageresource |
| struct BLINK_COMMON_EXPORT ImageResource { |
| ImageResource(); |
| ImageResource(const ImageResource& other); |
| ~ImageResource(); |
| |
| bool operator==(const ImageResource& other) const; |
| |
| // 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. |
| GURL src; |
| |
| // Empty if the parsing failed or the field was not present. 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. |
| base::string16 type; |
| |
| // Empty if the parsing failed, the field was not present or empty. |
| // The special value "any" is represented by gfx::Size(0, 0). |
| std::vector<gfx::Size> sizes; |
| |
| // Never empty. Defaults to a vector with a single value, IconPurpose::ANY, |
| // if not explicitly specified in the manifest. |
| std::vector<mojom::ManifestImageResource_Purpose> purpose; |
| }; |
| |
| // Structure representing a shortcut as per the Manifest specification, see: |
| // https://w3c.github.io/manifest/#shortcuts-member |
| struct BLINK_COMMON_EXPORT ShortcutItem { |
| ShortcutItem(); |
| ~ShortcutItem(); |
| |
| base::string16 name; |
| base::Optional<base::string16> short_name; |
| base::Optional<base::string16> description; |
| GURL url; |
| std::vector<ImageResource> icons; |
| }; |
| |
| struct BLINK_COMMON_EXPORT FileFilter { |
| base::string16 name; |
| std::vector<base::string16> accept; |
| }; |
| |
| // Structure representing a Web Share target's query parameter keys. |
| struct BLINK_COMMON_EXPORT ShareTargetParams { |
| ShareTargetParams(); |
| ~ShareTargetParams(); |
| |
| base::Optional<base::string16> title; |
| base::Optional<base::string16> text; |
| base::Optional<base::string16> url; |
| std::vector<FileFilter> files; |
| }; |
| |
| // Structure representing how a Web Share target handles an incoming share. |
| struct BLINK_COMMON_EXPORT ShareTarget { |
| ShareTarget(); |
| ~ShareTarget(); |
| |
| // The URL used for sharing. Query parameters are added to this comprised of |
| // keys from |params| and values from the shared data. |
| GURL action; |
| |
| // The HTTP request method for the web share target. |
| blink::mojom::ManifestShareTarget_Method method; |
| |
| // The way that share data is encoded in "POST" request. |
| blink::mojom::ManifestShareTarget_Enctype enctype; |
| |
| ShareTargetParams params; |
| }; |
| |
| // Structure representing a File Handler. |
| struct BLINK_COMMON_EXPORT FileHandler { |
| // The URL which will be opened when the file handler is invoked. |
| GURL action; |
| base::string16 name; |
| std::map<base::string16, std::vector<base::string16>> accept; |
| }; |
| |
| // Structure representing a Protocol Handler. |
| struct BLINK_COMMON_EXPORT ProtocolHandler { |
| base::string16 protocol; |
| GURL url; |
| }; |
| |
| struct BLINK_COMMON_EXPORT UrlHandler { |
| url::Origin origin; |
| }; |
| |
| // Structure representing a related application. |
| struct BLINK_COMMON_EXPORT RelatedApplication { |
| RelatedApplication(); |
| ~RelatedApplication(); |
| |
| // The platform on which the application can be found. This can be any |
| // string, and is interpreted by the consumer of the object. Empty if the |
| // parsing failed. |
| base::Optional<base::string16> platform; |
| |
| // URL at which the application can be found. One of |url| and |id| must be |
| // present. Empty if the parsing failed or the field was not present. |
| GURL url; |
| |
| // An id which is used to represent the application on the platform. One of |
| // |url| and |id| must be present. Empty if the parsing failed or the field |
| // was not present. |
| base::Optional<base::string16> id; |
| }; |
| |
| Manifest(); |
| Manifest(const Manifest& other); |
| ~Manifest(); |
| |
| // Returns whether this Manifest had no attribute set. A newly created |
| // Manifest is always empty. |
| bool IsEmpty() const; |
| |
| // Null if the parsing failed or the field was not present. |
| base::Optional<base::string16> name; |
| |
| // Null if the parsing failed or the field was not present. |
| base::Optional<base::string16> short_name; |
| |
| // Null if the parsing failed or the field was not present. |
| base::Optional<base::string16> description; |
| |
| // Empty if the parsing failed or the field was not present. |
| GURL start_url; |
| |
| // Set to DisplayMode::kUndefined if the parsing failed or the field was not |
| // present. |
| blink::mojom::DisplayMode display = blink::mojom::DisplayMode::kUndefined; |
| |
| // Empty if the parsing failed, the field was not present, or all the |
| // values inside the JSON array were invalid. |
| std::vector<blink::mojom::DisplayMode> display_override; |
| |
| // Set to device::mojom::ScreenOrientationLockType::DEFAULT if the parsing |
| // failed or the field was not present. |
| device::mojom::ScreenOrientationLockType orientation = |
| device::mojom::ScreenOrientationLockType::DEFAULT; |
| |
| // Empty if the parsing failed, the field was not present, or all the |
| // icons inside the JSON array were invalid. |
| std::vector<ImageResource> icons; |
| |
| // Empty if the parsing failed, the field was not present, or all the |
| // screenshots inside the JSON array were invalid. |
| std::vector<ImageResource> screenshots; |
| |
| // Empty if the parsing failed, the field was not present, or all the |
| // icons inside the JSON array were invalid. |
| std::vector<ShortcutItem> shortcuts; |
| |
| // Null if parsing failed or the field was not present. |
| base::Optional<ShareTarget> share_target; |
| |
| // Empty if parsing failed or the field was not present. |
| // 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 |
| std::vector<FileHandler> file_handlers; |
| |
| // Empty if parsing failed or the field was not present. |
| // 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 |
| std::vector<ProtocolHandler> protocol_handlers; |
| |
| // TODO(crbug.com/1072058): This field is non-standard and part of an |
| // experiment. See: |
| // https://github.com/WICG/pwa-url-handler/blob/master/explainer.md |
| // Empty if the parsing failed, the field was not present, empty or all the |
| // entries inside the array were invalid. |
| std::vector<UrlHandler> url_handlers; |
| |
| // Empty if the parsing failed, the field was not present, empty or all the |
| // applications inside the array were invalid. The order of the array |
| // indicates the priority of the application to use. |
| std::vector<RelatedApplication> 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 = false; |
| |
| // Null if field is not present or parsing failed. |
| base::Optional<SkColor> theme_color; |
| |
| // Null if field is not present or parsing failed. |
| base::Optional<SkColor> background_color; |
| |
| // This is a proprietary extension of the web Manifest, double-check that it |
| // is okay to use this entry. |
| // Null if parsing failed or the field was not present. |
| base::Optional<base::string16> gcm_sender_id; |
| |
| // Empty if the parsing failed. Otherwise defaults to the start URL (or |
| // document URL if start URL isn't present) with filename, query, and fragment |
| // removed. |
| GURL scope; |
| |
| mojom::CaptureLinks capture_links = mojom::CaptureLinks::kUndefined; |
| }; |
| |
| } // namespace blink |
| |
| #endif // THIRD_PARTY_BLINK_PUBLIC_COMMON_MANIFEST_MANIFEST_H_ |