| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef IOS_CHROME_APP_APP_STARTUP_PARAMETERS_H_ |
| #define IOS_CHROME_APP_APP_STARTUP_PARAMETERS_H_ |
| |
| #import <Foundation/Foundation.h> |
| |
| #include <map> |
| #include <string> |
| #include <vector> |
| |
| // Input format for the `TabOpening` protocol. |
| enum class ApplicationModeForTabOpening { |
| NORMAL, |
| INCOGNITO, |
| CURRENT, |
| UNDETERMINED |
| }; |
| |
| enum TabOpeningPostOpeningAction { |
| // No action should be done |
| NO_ACTION = 0, |
| START_VOICE_SEARCH, |
| START_QR_CODE_SCANNER, |
| START_LENS_FROM_HOME_SCREEN_WIDGET, |
| START_LENS_FROM_APP_ICON_LONG_PRESS, |
| START_LENS_FROM_SPOTLIGHT, |
| FOCUS_OMNIBOX, |
| SHOW_DEFAULT_BROWSER_SETTINGS, |
| SEARCH_PASSWORDS, |
| OPEN_READING_LIST, |
| OPEN_BOOKMARKS, |
| OPEN_RECENT_TABS, |
| OPEN_TAB_GRID, |
| SET_CHROME_DEFAULT_BROWSER, |
| VIEW_HISTORY, |
| OPEN_PAYMENT_METHODS, |
| RUN_SAFETY_CHECK, |
| MANAGE_PASSWORDS, |
| MANAGE_SETTINGS, |
| OPEN_LATEST_TAB, |
| START_LENS_FROM_INTENTS, |
| OPEN_CLEAR_BROWSING_DATA_DIALOG, |
| TAB_OPENING_POST_OPENING_ACTION_COUNT, |
| ADD_BOOKMARKS, |
| ADD_READING_LIST_ITEMS, |
| EXTERNAL_ACTION_SHOW_BROWSER_SETTINGS, |
| }; |
| |
| class GURL; |
| |
| // This class stores all the parameters relevant to the app startup in case |
| // of launch from another app. |
| @interface AppStartupParameters : NSObject |
| |
| // The URL that should be opened. This may not always be the same URL as the one |
| // that was received. The reason for this is in the case of Universal Link |
| // navigation where we may want to open up a fallback URL e.g., the New Tab Page |
| // instead of the actual universal link. If this URL is empty, a new tab page |
| // will be created upon app open iff there is no active tab. |
| @property(nonatomic, readonly, assign) const GURL& externalURL; |
| |
| // Original URL that should be opened. May or may not be the same as |
| // `externalURL`. |
| @property(nonatomic, readonly, assign) const GURL& completeURL; |
| |
| // The list of URLs to open. First URL in the vector is the same |
| // as `externalURL`. |
| @property(nonatomic, readonly, assign) const std::vector<GURL>& URLs; |
| |
| // The URL query string parameters in the case that the app was launched as a |
| // result of Universal Link navigation. The map associates query string |
| // parameters with their corresponding value. |
| @property(nonatomic, assign) std::map<std::string, std::string> |
| externalURLParams; |
| |
| // The list of inputted URLs to process. These URLs aren't automatically opened. |
| // Used in the context of Siri shortcuts that allow URL inputs that are not |
| // meant to be opened in new tabs automatically. |
| @property(nonatomic, readwrite, strong) NSArray<NSURL*>* inputURLs; |
| |
| // The mode in which the tab must be opened. Defaults to UNDETERMINED. |
| @property(nonatomic, assign) ApplicationModeForTabOpening applicationMode; |
| // Action to be taken after loading the URL. |
| @property(nonatomic, readwrite, assign) |
| TabOpeningPostOpeningAction postOpeningAction; |
| // Boolean to track if a Payment Request response is requested at startup. |
| @property(nonatomic, readwrite, assign) BOOL completePaymentRequest; |
| // When this flag is set, attempt to open `externalURL` in an existing tab. |
| @property(nonatomic, readwrite, assign) BOOL openExistingTab; |
| // Text query that should be executed on startup. |
| @property(nonatomic, readwrite, copy) NSString* textQuery; |
| // Data for UIImage for image query that should be executed on startup. |
| @property(nonatomic, readwrite, strong) NSData* imageSearchData; |
| // Boolean to track if the app is open in an user unexpected mode. |
| // When a certain enterprise policy has been set, it's possible that one browser |
| // mode is disabled. When the user intends to open an unavailable mode of |
| // Chrome, the browser won't proceed in that disabled mode, and it will signal |
| // to the user that a different mode is opened. |
| @property(nonatomic, readwrite, getter=isUnexpectedMode) BOOL unexpectedMode; |
| // Boolean to track whether the app was opened via a custom scheme from another |
| // first-party app. |
| @property(nonatomic, readwrite, assign) BOOL openedViaFirstPartyScheme; |
| // Boolean to track whether the app was opened via widget. |
| @property(nonatomic, readwrite, assign) BOOL openedViaWidgetScheme; |
| // Boolean to track whether the app was opened via URL. |
| @property(nonatomic, readwrite, assign) BOOL openedWithURL; |
| |
| - (instancetype)init NS_UNAVAILABLE; |
| |
| - (instancetype)initWithExternalURL:(const GURL&)externalURL |
| completeURL:(const GURL&)completeURL |
| applicationMode:(ApplicationModeForTabOpening)mode |
| NS_DESIGNATED_INITIALIZER; |
| |
| - (instancetype)initWithURLs:(const std::vector<GURL>&)URLs |
| applicationMode:(ApplicationModeForTabOpening)mode; |
| |
| @end |
| |
| #endif // IOS_CHROME_APP_APP_STARTUP_PARAMETERS_H_ |