|  | // Copyright 2022 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_BROWSER_MAILTO_HANDLER_MAILTO_HANDLER_SERVICE_H_ | 
|  | #define IOS_CHROME_BROWSER_MAILTO_HANDLER_MAILTO_HANDLER_SERVICE_H_ | 
|  |  | 
|  | #import <UIKit/UIKit.h> | 
|  |  | 
|  | #import "base/functional/callback.h" | 
|  | #import "components/keyed_service/core/keyed_service.h" | 
|  |  | 
|  | // Service responsible for providing an handler for mailto: links. | 
|  | class MailtoHandlerService : public KeyedService { | 
|  | public: | 
|  | MailtoHandlerService(); | 
|  | ~MailtoHandlerService() override; | 
|  |  | 
|  | // Returns a properly localized title for the menu item or button used to | 
|  | // open the settings for this handler. Returns nil if mailto: handling is | 
|  | // not supported. | 
|  | virtual NSString* SettingsTitle() const = 0; | 
|  |  | 
|  | // Creates and returns a view controller for presenting the settings for | 
|  | // mailto: handling to the user. Returns nil if mailto: handling is not | 
|  | // supported. | 
|  | virtual UIViewController* CreateSettingsController() = 0; | 
|  |  | 
|  | // Dismisses any mailto: handling UI immediately. Handling is cancelled. | 
|  | virtual void DismissAllMailtoHandlerInterfaces() = 0; | 
|  |  | 
|  | // Handles the specified mailto: URL. Should fall back on the built-in | 
|  | // URL handling in case of error. | 
|  | virtual void HandleMailtoURL(NSURL* url, base::OnceClosure completion) = 0; | 
|  | }; | 
|  |  | 
|  | #endif  // IOS_CHROME_BROWSER_MAILTO_HANDLER_MAILTO_HANDLER_SERVICE_H_ |