| // Copyright 2018 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef ASH_ASSISTANT_UTIL_DEEP_LINK_UTIL_H_ |
| #define ASH_ASSISTANT_UTIL_DEEP_LINK_UTIL_H_ |
| |
| #include <map> |
| #include <optional> |
| #include <string> |
| |
| #include "base/component_export.h" |
| #include "base/timer/timer.h" |
| |
| class GURL; |
| |
| namespace ash { |
| namespace assistant { |
| |
| enum class AssistantEntryPoint; |
| enum class AssistantQuerySource; |
| |
| namespace util { |
| |
| // Enumeration of deep link types. |
| enum class DeepLinkType { |
| kUnsupported, |
| kAlarmTimer, |
| kChromeSettings, |
| kFeedback, |
| kLists, |
| kNotes, |
| kOnboarding, |
| kQuery, |
| kReminders, |
| kScreenshot, |
| kSettings, |
| kTaskManager, |
| }; |
| |
| // Enumeration of deep link parameters. |
| // Examples of usage in comments. Note that actual Assistant deeplinks are |
| // prefixed w/ "googleassistant"; "ga" is only used here to avoid line wrapping. |
| enum class DeepLinkParam { |
| kAction, // ga://proactive-suggestions?action=cardClick |
| kCategory, // ga://proactive-suggestions?category=1 |
| kClientId, // ga://reminders?action=edit&clientId=1 |
| kDurationMs, // ga://alarm-timer?action=addTimeToTimer&durationMs=60000 |
| kEid, // ga://lists?eid=1 |
| kEntryPoint, // ga://send-query?q=weather&entryPoint=11 |
| kHref, // ga://proactive-suggestions?action=cardClick&href=https://g.co/ |
| kIndex, // ga://proactive-suggestions?action=cardClick&index=1 |
| kId, // ga://alarm-timer?action=addTimeToTimer&id=1 |
| kPage, // ga://settings?page=googleAssistant |
| kQuery, // ga://send-query?q=weather |
| kQuerySource, // ga://send-query?q=weather&querySource=12 |
| kRelaunch, // ga://onboarding?relaunch=true |
| kType, // ga://lists?id=1&type=shopping |
| kVeId, // ga://proactive-suggestions?action=cardClick&veId=1 |
| }; |
| |
| // Enumeration of alarm/timer deep link actions. |
| enum class AlarmTimerAction { |
| kAddTimeToTimer, |
| kPauseTimer, |
| kRemoveAlarmOrTimer, |
| kResumeTimer, |
| }; |
| |
| // Enumeration of reminder deep link actions. |
| enum class ReminderAction { |
| kCreate, |
| kEdit, |
| }; |
| |
| // Returns a new deep link, having appended or replaced the entry point param |
| // from the original |deep_link| with |entry_point|. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| GURL AppendOrReplaceEntryPointParam(const GURL& deep_link, |
| AssistantEntryPoint entry_point); |
| |
| // Returns a new deep link, having appended or replaced the query source param |
| // from the original |deep_link| with |query_source|. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| GURL AppendOrReplaceQuerySourceParam(const GURL& deep_link, |
| AssistantQuerySource query_source); |
| |
| // Returns a deep link to perform an alarm/timer action. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<GURL> CreateAlarmTimerDeepLink( |
| AlarmTimerAction action, |
| std::optional<std::string> alarm_timer_id, |
| std::optional<base::TimeDelta> duration = std::nullopt); |
| |
| // Returns a deep link to send an Assistant query. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| GURL CreateAssistantQueryDeepLink(const std::string& query); |
| |
| // Returns a deep link to top level Assistant Settings. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) GURL CreateAssistantSettingsDeepLink(); |
| |
| // Returns the parsed parameters for the specified |deep_link|. If the supplied |
| // argument is not a supported deep link or if no parameters are found, an empty |
| // map is returned. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::map<std::string, std::string> GetDeepLinkParams(const GURL& deep_link); |
| |
| // Returns a specific string |param| from the given parameters. If the desired |
| // parameter is not found, and empty value is returned. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<std::string> GetDeepLinkParam( |
| const std::map<std::string, std::string>& params, |
| DeepLinkParam param); |
| |
| // Returns AlarmTimerAction from the given parameters. If the desired |
| // parameter is not found or is not an AlarmTimerAction, an empty value is |
| // returned. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<AlarmTimerAction> GetDeepLinkParamAsAlarmTimerAction( |
| const std::map<std::string, std::string>& params); |
| |
| // Returns a specific bool |param| from the given parameters. If the desired |
| // parameter is not found or is not a bool, an empty value is returned. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<bool> GetDeepLinkParamAsBool( |
| const std::map<std::string, std::string>& params, |
| DeepLinkParam param); |
| |
| // Returns a specific entry point |param| from the given parameters. If the |
| // desired parameter is not found or is not mappable to an Assistant entry |
| // point, an empty value is returned. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<AssistantEntryPoint> GetDeepLinkParamAsEntryPoint( |
| const std::map<std::string, std::string>& params, |
| DeepLinkParam param); |
| |
| // Returns a specific GURL |param| from the given parameters. If the desired |
| // parameter is not found, an absent value is returned. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<GURL> GetDeepLinkParamAsGURL( |
| const std::map<std::string, std::string>& params, |
| DeepLinkParam param); |
| |
| // Returns a specific int |param| from the given parameters. If the desired |
| // parameter is not found or is not an int, an empty value is returned. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<int32_t> GetDeepLinkParamAsInt( |
| const std::map<std::string, std::string>& params, |
| DeepLinkParam param); |
| |
| // Returns a specific int64 |param| from the given parameters. If the desired |
| // parameter is not found or is not an int64, an empty value is returned. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<int64_t> GetDeepLinkParamAsInt64( |
| const std::map<std::string, std::string>& params, |
| DeepLinkParam param); |
| |
| // Returns a specific query source |param| from the given parameters. If the |
| // desired parameter is not found or is not mappable to an Assistant query |
| // source, an empty value is returned. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<AssistantQuerySource> GetDeepLinkParamAsQuerySource( |
| const std::map<std::string, std::string>& params, |
| DeepLinkParam param); |
| |
| // Returns a specific ReminderAction |param| from the given parameters. If the |
| // desired parameter is not found, an empty value is returned. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<ReminderAction> GetDeepLinkParamAsRemindersAction( |
| const std::map<std::string, std::string> params, |
| DeepLinkParam param); |
| |
| // Returns TimeDelta from the given parameters. If the desired parameter is not |
| // found, can't convert to TimeDelta or not a time type parameter, an empty |
| // value is returned. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<base::TimeDelta> GetDeepLinkParamAsTimeDelta( |
| const std::map<std::string, std::string>& params, |
| DeepLinkParam param); |
| |
| // Returns the deep link type of the specified |url|. If the specified url is |
| // not a supported deep link, DeepLinkType::kUnsupported is returned. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) DeepLinkType GetDeepLinkType(const GURL& url); |
| |
| // Returns true if the specified |url| is a deep link of the given |type|. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| bool IsDeepLinkType(const GURL& url, DeepLinkType type); |
| |
| // Returns true if the specified |url| is a deep link, false otherwise. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) bool IsDeepLinkUrl(const GURL& url); |
| |
| // Returns the Assistant URL for the deep link of the specified |type|. A return |
| // value will only be present if the deep link type is one of {kLists, kNotes, |
| // or kReminders}. If |id| is not contained in |params|, the returned URL will |
| // be for the top-level Assistant URL. Otherwise, the URL will correspond to |
| // the resource identified by |id|. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<GURL> GetAssistantUrl( |
| DeepLinkType type, |
| const std::map<std::string, std::string>& params); |
| |
| // Returns the URL for the specified Chrome Settings |page|. If page is absent |
| // or not allowed, the URL will be for top-level Chrome Settings. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| GURL GetChromeSettingsUrl(const std::optional<std::string>& page); |
| |
| // Returns the web URL for the specified |deep_link|. A return value will only |
| // be present if |deep_link| is a web deep link as identified by the |
| // IsWebDeepLink(GURL) API. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<GURL> GetWebUrl(const GURL& deep_link); |
| |
| // Returns the web URL for a deep link of the specified |type| with the given |
| // |params|. A return value will only be present if the deep link type is a web |
| // deep link type as identified by the IsWebDeepLinkType(DeepLinkType) API. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| std::optional<GURL> GetWebUrl(DeepLinkType type, |
| const std::map<std::string, std::string>& params); |
| |
| // Returns true if the specified |deep_link| is a web deep link. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) bool IsWebDeepLink(const GURL& deep_link); |
| |
| // Returns true if the specified deep link |type| is a web deep link. |
| COMPONENT_EXPORT(ASSISTANT_UTIL) |
| bool IsWebDeepLinkType(DeepLinkType type, |
| const std::map<std::string, std::string>& params); |
| |
| } // namespace util |
| } // namespace assistant |
| } // namespace ash |
| |
| #endif // ASH_ASSISTANT_UTIL_DEEP_LINK_UTIL_H_ |