// Copyright 2014 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef EXTENSIONS_BROWSER_API_ACTIVITY_MONITOR_H_ #define EXTENSIONS_BROWSER_API_ACTIVITY_MONITOR_H_ #include <memory> #include <string> #include "base/values.h" #include "extensions/common/extension_id.h" class GURL; namespace content { class BrowserContext; } namespace extensions { namespace activity_monitor { using Monitor = void (*)(content::BrowserContext* browser_context, const ExtensionId& extension_id, const std::string& activity_name, const base::Value::List& event_args); using WebRequestMonitor = void (*)(content::BrowserContext* browser_context, const ExtensionId& extension_id, const GURL& url, bool is_incognito, const std::string& api_call, base::Value::Dict details); // Get or set the current global monitor for API events and functions. Note that // these handlers *must* be allowed to be called on any thread! // Additionally, since this may be called on any thead, |browser_context| is // unsafe to use unless posted to the UI thread. Monitor GetApiEventMonitor(); Monitor GetApiFunctionMonitor(); WebRequestMonitor GetWebRequestMonitor(); void SetApiEventMonitor(Monitor event_monitor); void SetApiFunctionMonitor(Monitor function_monitor); void SetWebRequestMonitor(WebRequestMonitor web_request_monitor); // Called when an API event is dispatched to an extension. May be called on any // thread. |browser_context| is unsafe to use. void OnApiEventDispatched(content::BrowserContext* browser_context, const ExtensionId& extension_id, const std::string& event_name, const base::Value::List& event_args); // Called when an extension calls an API function. May be called on any thread. // |browser_context| is unsafe to use. void OnApiFunctionCalled(content::BrowserContext* browser_context, const ExtensionId& extension_id, const std::string& api_name, const base::Value::List& args); // Called when an extension uses the web request API. May be called on any // thread. |browser_context| is unsafe to use. void OnWebRequestApiUsed(content::BrowserContext* browser_context, const ExtensionId& extension_id, const GURL& url, bool is_incognito, const std::string& api_call, base::Value::Dict details); } // namespace activity_monitor } // namespace extensions #endif // EXTENSIONS_BROWSER_API_ACTIVITY_MONITOR_H_