#ifndef EXTENSIONS_BROWSER_API_MESSAGING_MESSAGING_DELEGATE_H_
#define EXTENSIONS_BROWSER_API_MESSAGING_MESSAGING_DELEGATE_H_
#include <memory>
#include <optional>
#include <string>
#include "base/functional/callback_forward.h"
#include "base/memory/weak_ptr.h"
#include "extensions/browser/api/messaging/message_port.h"
#include "extensions/common/extension_id.h"
class GURL;
namespace content {
class BrowserContext;
class RenderFrameHost;
class WebContents;
}
namespace extensions {
class Extension;
struct PortId;
class MessagingDelegate {
public:
enum class PolicyPermission {
DISALLOW,
ALLOW_SYSTEM_ONLY,
ALLOW_ALL,
};
virtual ~MessagingDelegate() = default;
virtual PolicyPermission IsNativeMessagingHostAllowed(
content::BrowserContext* browser_context,
const std::string& native_host_name);
virtual std::optional<base::Value::Dict> MaybeGetTabInfo(
content::WebContents* web_contents);
virtual content::WebContents* GetWebContentsByTabId(
content::BrowserContext* browser_context,
int tab_id);
virtual std::unique_ptr<MessagePort> CreateReceiverForNativeApp(
content::BrowserContext* browser_context,
base::WeakPtr<MessagePort::ChannelDelegate> channel_delegate,
content::RenderFrameHost* source,
const ExtensionId& extension_id,
const PortId& receiver_port_id,
const std::string& native_app_name,
bool allow_user_level,
std::string* error_out);
virtual void QueryIncognitoConnectability(
content::BrowserContext* context,
const Extension* extension,
content::WebContents* web_contents,
const GURL& url,
base::OnceCallback<void(bool)> callback);
};
}
#endif