| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| module new_tab_page.mojom; |
| |
| import "skia/public/mojom/skcolor.mojom"; |
| import "ui/webui/resources/cr_components/most_visited/most_visited.mojom"; |
| import "url/mojom/url.mojom"; |
| |
| // A collection of background images. |
| struct BackgroundCollection { |
| // Collection identifier. |
| string id; |
| // Localized string of the collection name. |
| string label; |
| // URL to a preview image for the collection. Can point to untrusted content. |
| url.mojom.Url preview_image_url; |
| }; |
| |
| // A background image in a collection. |
| struct CollectionImage { |
| // Human readable attributions of the background image. |
| string attribution_1; |
| string attribution_2; |
| // URL associated with the background image. Used for href. |
| url.mojom.Url attribution_url; |
| // URL of image. Can point to untrusted content. |
| url.mojom.Url image_url; |
| // URL to a preview of the image. Can point to untrusted content. |
| url.mojom.Url preview_image_url; |
| // Collection id of the image; |
| string collection_id; |
| }; |
| |
| /** |
| * New Tab Page image sources. This enum must match the numbering for |
| * NTPBackgroundImageSource in enums.xml. These values are persisted to |
| * logs. Entries should not be renumbered, removed or reused. |
| */ |
| enum NtpBackgroundImageSource { |
| kNoImage, |
| kFirstPartyThemeWithoutDailyRefresh, |
| kFirstPartyThemeWithDailyRefresh, |
| kThirdPartyTheme, |
| kUploadedImage, |
| kWallpaperSearch, |
| kWallpaperSearchInspiration, |
| }; |
| |
| // Enum representing the in product help promo to trigger. |
| enum IphFeature { |
| kCustomizeChrome, |
| kCustomizeModules, |
| }; |
| |
| // The background image URL and styling. |
| struct BackgroundImage { |
| // URL to the background image. Can point to untrusted content. |
| url.mojom.Url url; |
| // URL to a higher res background image. Can point to untrusted content. |
| url.mojom.Url? url_2x; |
| // URL to a logo of the theme. Has chrome:// scheme. |
| url.mojom.Url? attribution_url; |
| // CSS styling properties set on the background image. |
| string? size; |
| string? repeat_x; |
| string? repeat_y; |
| string? position_x; |
| string? position_y; |
| // Source of background image. |
| NtpBackgroundImageSource image_source; |
| }; |
| |
| // A generic theme. |
| struct Theme { |
| skia.mojom.SkColor text_color; |
| skia.mojom.SkColor background_color; |
| // True if user color mode is baseline. |
| bool is_baseline; |
| // True if the background is custom. |
| bool is_custom_background; |
| // True if daily refresh is enabled. |
| bool daily_refresh_enabled; |
| // True if the theme is dark (e.g. NTP background color is dark). |
| bool is_dark; |
| // Color of Google logo. If not set show the logo multi-colored. |
| skia.mojom.SkColor? logo_color; |
| // Collection id of the background image. |
| string? background_image_collection_id; |
| // The background image. |
| BackgroundImage? background_image; |
| // Human readable attributions of the background image. |
| string? background_image_attribution_1; |
| string? background_image_attribution_2; |
| // URL associated with the background image. Used for href. |
| url.mojom.Url? background_image_attribution_url; |
| // Theme settings for the NTP MV tiles. |
| most_visited.mojom.MostVisitedTheme most_visited; |
| }; |
| |
| // Specifies look of the doodle share button. |
| struct DoodleShareButton { |
| // Position in pixels relative to the doodle's upper left corner. |
| int32 x; |
| int32 y; |
| // Button background color. |
| skia.mojom.SkColor background_color; |
| // Data URL of icon shown on the button. |
| url.mojom.Url icon_url; |
| }; |
| |
| // Type of image of an image doodle. Used for metrics logging only. |
| enum DoodleImageType { |
| // Animation of an animated doodle. |
| kAnimation, |
| // Static preview image of an animated doodle. |
| kCta, |
| // Image of a static doodle. |
| kStatic, |
| }; |
| |
| // A simple or animated doodle in either dark or light mode. |
| struct ImageDoodle { |
| // Doodle image encoded as data URL. |
| url.mojom.Url image_url; |
| // URL pointing to animated content (e.g. gif). Only set for animated doodles. |
| url.mojom.Url? animation_url; |
| // Dimensions of the original image in pixels. |
| uint32 width; |
| uint32 height; |
| // Color of the background the doodle was designed for. If the NTP background |
| // differs from that color we show the doodle in a box of that color. |
| skia.mojom.SkColor background_color; |
| // Specification of the share button. |
| DoodleShareButton? share_button; |
| // URLs to be pinged when an image has been shown. |
| url.mojom.Url image_impression_log_url; |
| url.mojom.Url? animation_impression_log_url; |
| }; |
| |
| // A simple or animated doodle in both dark and light mode. |
| struct AllModeImageDoodle { |
| // Doodles for respective modes. |
| ImageDoodle light; |
| ImageDoodle? dark; |
| // URL opened in new tab when the doodle is clicked. |
| url.mojom.Url? on_click_url; |
| // URL displayed to users, which they can use to share the doodle. |
| url.mojom.Url share_url; |
| }; |
| |
| // An interactive doodle. |
| struct InteractiveDoodle { |
| // URL pointing to doodle page. |
| url.mojom.Url url; |
| // Initial width and height of the doodle iframe in pixels. |
| uint32 width; |
| uint32 height; |
| }; |
| |
| // A doodle. Retrieved from the Google doodle server. |
| struct Doodle { |
| // Set for simple and animated doodles. |
| AllModeImageDoodle? image; |
| // Set for interactive doodles. |
| InteractiveDoodle? interactive; |
| // Localized description of the doodle. |
| string description; |
| }; |
| |
| // A channel through which a doodle can be shared. |
| enum DoodleShareChannel { |
| kFacebook, |
| kTwitter, |
| kEmail, |
| kLinkCopy, |
| }; |
| |
| enum CustomizeChromeSection { |
| kUnspecified, |
| kAppearance, |
| kShortcuts, |
| kModules, |
| kWallpaperSearch, |
| }; |
| |
| struct PromoImagePart { |
| url.mojom.Url image_url; |
| url.mojom.Url target; |
| }; |
| |
| struct PromoLinkPart { |
| string text; |
| url.mojom.Url url; |
| }; |
| |
| struct PromoTextPart { |
| string text; |
| }; |
| |
| union PromoPart { |
| PromoImagePart image; |
| PromoLinkPart link; |
| PromoTextPart text; |
| }; |
| |
| // Homepage promo used to display a message with a link on the NTP. |
| struct Promo { |
| // A unique identifier for this promo. |
| string? id; |
| // URL to ping to log a promo impression. May be invalid. |
| url.mojom.Url? log_url; |
| // Middle slot promo data. |
| array<PromoPart> middle_slot_parts; |
| }; |
| |
| // Used to determine available modules for the NTP. |
| struct ModuleIdName { |
| // A unique identifier associated with a module. |
| string id; |
| // The name associated with a module. |
| string name; |
| }; |
| |
| // Action the user performed while using the customize dialog. Used for metrics |
| // logging only. Actions correspond to items in NTPLoggingEventType. |
| enum CustomizeDialogAction { |
| kCancelClicked, |
| kDoneClicked, |
| kOpenClicked, |
| kBackgroundsBackClicked, |
| kBackgroundsNoBackgroundSelected, |
| kBackgroundsCollectionOpened, |
| kBackgroundsRefreshToggleClicked, |
| kBackgroundsImageSelected, |
| kBackgroundsUploadFromDeviceClicked, |
| kShortcutsCustomLinksClicked, |
| kShortcutsMostVisitedClicked, |
| kShortcutsVisibilityToggleClicked, |
| }; |
| |
| // Opt in status. Used for metrics logging only. |
| enum OptInStatus { |
| kExplicitOptIn, |
| kImplicitOptIn, |
| kOptOut, |
| }; |
| |
| // Used by the WebUI page to bootstrap bidirectional communication. |
| interface PageHandlerFactory { |
| // The WebUI page's |BrowserProxy| singleton calls this method when the page |
| // is first initialized. |
| CreatePageHandler(pending_remote<Page> page, |
| pending_receiver<PageHandler> handler); |
| }; |
| |
| // Browser-side handler for requests from WebUI page. |
| interface PageHandler { |
| // Sets the background image and notifies all NTPs of the change. |
| SetBackgroundImage(string attribution_1, string attribution_2, |
| url.mojom.Url attribution_url, url.mojom.Url image_url, |
| url.mojom.Url thumbnail_url, string collection_id); |
| // Sets collection id for daily refresh. When |collection_id| is empty, the |
| // daily refresh is turned off. |
| SetDailyRefreshCollectionId(string collection_id); |
| // Clears the background and daily refresh settings. |
| SetNoBackgroundImage(); |
| // Reverts any changes to the background when a background preview |
| // is cancelled. |
| RevertBackgroundChanges(); |
| // Confirms that background has been changed. |
| ConfirmBackgroundChanges(); |
| // Sets the visibility of NTP tiles and whether custom links are enabled. |
| SetMostVisitedSettings(bool custom_links_enabled, bool shortcuts_visible); |
| // Returns the visibility of NTP tiles and whether custom links are enabled. |
| GetMostVisitedSettings() => (bool custom_links_enabled, |
| bool shortcuts_visible); |
| // Returns the collections of background images. |
| GetBackgroundCollections() => (array<BackgroundCollection> collections); |
| // Returns the images of a collection identified by |collection_id|. |
| GetBackgroundImages(string collection_id) => (array<CollectionImage> images); |
| // Gets current doodle if there is one. |
| GetDoodle() => (Doodle? doodle); |
| // Choose custom background from local file system. |
| ChooseLocalCustomBackground() => (bool success); |
| // Updates middle slot promo data. Triggers a call to |SetPromo|. |
| UpdatePromoData(); |
| // Marks a promo as blocked. |
| BlocklistPromo(string promo_id); |
| // Unmarks a promo as blocked. |
| UndoBlocklistPromo(string promo_id); |
| // Called when a module the given id is dismissed. |
| OnDismissModule(string module_id); |
| // Called when a module the given id is restored. |
| OnRestoreModule(string module_id); |
| // If |visible| the modules will be shown. |
| SetModulesVisible(bool visible); |
| // Disables module with ID |module_id| if |disabled|. Enables otherwise. |
| SetModuleDisabled(string module_id, bool disabled); |
| // Triggers a call to |SetDisabledModules|. |
| UpdateDisabledModules(); |
| // Called when at least one module has loaded with data. |
| // `module_ids` is an array of module descriptor ids that identifies the |
| // modules that loaded with data. |
| OnModulesLoadedWithData(array<string> module_ids); |
| // Called when a user uses a module. May lead to a HaTS survey being |
| // displayed or an in product help promo being closed. |
| OnModuleUsed(string module_id); |
| // Returns a list of available module id and name pairs. |
| GetModulesIdNames() => (array<ModuleIdName> data); |
| // Sets the order of modules. |
| SetModulesOrder(array<string> module_ids); |
| // Returns the order of modules or an empty array if the user has not |
| // reordered them before. |
| GetModulesOrder() => (array<string> module_ids); |
| // Increment the number of times the user has seen modules. |
| IncrementModulesShownCount(); |
| // If |visible| Modular NTP Desktop v1 First Run Experience will be shown. |
| SetModulesFreVisible(bool visible); |
| // Triggers a call to |SetModulesFreVisibility|. |
| UpdateModulesFreVisibility(); |
| // Log user's FRE |optInStatus|. |
| LogModulesFreOptInStatus(OptInStatus opt_in_status); |
| // Shows or hides the customize chrome in unified side panel. |
| SetCustomizeChromeSidePanelVisible(bool visible, |
| CustomizeChromeSection section); |
| // Increment the number of times the user has opened the side panel |
| // with the customize chrome button. |
| IncrementCustomizeChromeButtonOpenCount(); |
| |
| // Attempts to trigger the specified in product help promo. |
| MaybeShowFeaturePromo(IphFeature iph_feature); |
| |
| // ======= METRICS ======= |
| // Logs that the One Google Bar was added to the DOM / loaded in an iframe at |
| // |time|. |
| OnOneGoogleBarRendered(double time); |
| // Logs that the promo iframe was loaded at |time| and pings |log_url| for |
| // promo metrics logging. |
| OnPromoRendered(double time, url.mojom.Url? log_url); |
| // Logs an action performed in the customize dialog. |
| OnCustomizeDialogAction(CustomizeDialogAction action); |
| // Logs that the |type| image of an image doodle has been clicked. If set, the |
| // |log_url| should be pinged for metrics logging. |
| OnDoodleImageClicked(DoodleImageType type, url.mojom.Url? log_url); |
| // Logs that the |type| image of an image doodle has been shown at |time|. |
| // Returns additional params, which are fetched from |image_url|, we use to |
| // perform more doodle logging later. We can't fetch the params in JS because |
| // the NTP renderer process does not have network access. |
| OnDoodleImageRendered(DoodleImageType type, |
| double time, |
| url.mojom.Url log_url) |
| => (string? image_click_params, |
| url.mojom.Url? interaction_log_url, |
| string? share_id); |
| // Logs that the doodle with |doodle_id| has been shared through |channel|. |
| // |share_id| comes from a previous call to |OnDoodleImageRendered|. |
| OnDoodleShared(DoodleShareChannel channel, |
| string doodle_id, |
| string? share_id); |
| // Logs that a link on a promo has been clicked. |
| OnPromoLinkClicked(); |
| // Logs that the <ntp-app> element's |ready| callback method was called. |
| OnAppRendered(double time); |
| |
| }; |
| |
| // WebUI-side handler for requests from the browser. |
| interface Page { |
| // Sets Customize Chrome Side Panel visibility to |visible|. |
| SetCustomizeChromeSidePanelVisibility(bool visible); |
| // Sets the current theme. |
| SetTheme(Theme theme); |
| // Disables the modules in |ids|. If |all|, disables all modules and passes an |
| // empty list for |ids|. |
| SetDisabledModules(bool all, array<string> ids); |
| // Sets Modular NTP Desktop v1 First Run Experience's visibility to |visible|. |
| SetModulesFreVisibility(bool visible); |
| // Sets NTP homepage promo. |
| SetPromo(Promo? promo); |
| // Shows a toast with information about Chrome Webstore themes. |
| ShowWebstoreToast(); |
| // Sets wallpaper search button's visibility to to |visible|. |
| SetWallpaperSearchButtonVisibility(bool visible); |
| }; |