|  | // Copyright 2014 The Chromium Authors. All rights reserved. | 
|  | // 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> | 
|  |  | 
|  | class GURL; | 
|  |  | 
|  | namespace base { | 
|  | class DictionaryValue; | 
|  | class ListValue; | 
|  | } | 
|  |  | 
|  | namespace content { | 
|  | class BrowserContext; | 
|  | } | 
|  |  | 
|  | namespace extensions { | 
|  | namespace activity_monitor { | 
|  |  | 
|  | using Monitor = void (*)(content::BrowserContext* browser_context, | 
|  | const std::string& extension_id, | 
|  | const std::string& activity_name, | 
|  | const base::ListValue& event_args); | 
|  | using WebRequestMonitor = | 
|  | void (*)(content::BrowserContext* browser_context, | 
|  | const std::string& extension_id, | 
|  | const GURL& url, | 
|  | bool is_incognito, | 
|  | const std::string& api_call, | 
|  | std::unique_ptr<base::DictionaryValue> 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 std::string& extension_id, | 
|  | const std::string& event_name, | 
|  | const base::ListValue& 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 std::string& extension_id, | 
|  | const std::string& api_name, | 
|  | const base::ListValue& 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 std::string& extension_id, | 
|  | const GURL& url, | 
|  | bool is_incognito, | 
|  | const std::string& api_call, | 
|  | std::unique_ptr<base::DictionaryValue> details); | 
|  |  | 
|  | }  // namespace activity_monitor | 
|  | }  // namespace extensions | 
|  |  | 
|  | #endif  // EXTENSIONS_BROWSER_API_ACTIVITY_MONITOR_H_ |