chromium/ios/chrome/browser/mailto_handler/model/mailto_handler_service.h

// 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_MODEL_MAILTO_HANDLER_SERVICE_H_
#define IOS_CHROME_BROWSER_MAILTO_HANDLER_MODEL_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_MODEL_MAILTO_HANDLER_SERVICE_H_