Index: extensions/browser/api_activity_monitor.cc |
diff --git a/extensions/browser/api_activity_monitor.cc b/extensions/browser/api_activity_monitor.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7c5cf87afa6ca3bfbe8ba5192876dbf361ef8270 |
--- /dev/null |
+++ b/extensions/browser/api_activity_monitor.cc |
@@ -0,0 +1,74 @@ |
+// Copyright 2016 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. |
+ |
+#include "extensions/browser/api_activity_monitor.h" |
+ |
+#include "base/values.h" |
+ |
+namespace extensions { |
+namespace activity_monitor { |
+ |
+namespace { |
+ |
+Monitor g_event_monitor = nullptr; |
+Monitor g_function_monitor = nullptr; |
+WebRequestMonitor g_web_request_monitor = nullptr; |
+ |
+} // namespace |
+ |
+Monitor GetApiEventMonitor() { |
+ return g_event_monitor; |
+} |
+ |
+Monitor GetApiFunctionMonitor() { |
+ return g_function_monitor; |
+} |
+ |
+WebRequestMonitor GetWebRequestMonitor() { |
+ return g_web_request_monitor; |
+} |
+ |
+void SetApiEventMonitor(Monitor event_monitor) { |
+ g_event_monitor = event_monitor; |
+} |
+ |
+void SetApiFunctionMonitor(Monitor function_monitor) { |
+ g_function_monitor = function_monitor; |
+} |
+ |
+void SetWebRequestMonitor(WebRequestMonitor web_request_monitor) { |
+ g_web_request_monitor = web_request_monitor; |
+} |
+ |
+void OnApiEventDispatched(content::BrowserContext* browser_context, |
+ const std::string& extension_id, |
+ const std::string& event_name, |
+ const base::ListValue& event_args) { |
+ if (g_event_monitor) |
+ g_event_monitor(browser_context, extension_id, event_name, event_args); |
+} |
+ |
+// Called when an extension calls an API function. |
+void OnApiFunctionCalled(content::BrowserContext* browser_context, |
+ const std::string& extension_id, |
+ const std::string& api_name, |
+ const base::ListValue& args) { |
+ if (g_function_monitor) |
+ g_function_monitor(browser_context, extension_id, api_name, args); |
+} |
+ |
+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) { |
+ if (g_web_request_monitor) { |
+ g_web_request_monitor(browser_context, extension_id, url, is_incognito, |
+ api_call, std::move(details)); |
+ } |
+} |
+ |
+} // namespace activity_monitor |
+} // namespace extensions |