1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file.
4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef EXTENSIONS_RENDERER_API_ACTIVITY_LOGGER_H_
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define EXTENSIONS_RENDERER_API_ACTIVITY_LOGGER_H_
7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <string>
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/common/features/feature.h"
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/renderer/object_backed_native_handler.h"
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "v8/include/v8.h"
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace extensions {
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Used to log extension API calls and events that are implemented with custom
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// bindings.The actions are sent via IPC to extensions::ActivityLog for
18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// recording and display.
19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class APIActivityLogger : public ObjectBackedNativeHandler {
20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public:
21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  explicit APIActivityLogger(ScriptContext* context);
22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private:
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Used to distinguish API calls & events from each other in LogInternal.
25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  enum CallType { APICALL, EVENT };
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // This is ultimately invoked in bindings.js with JavaScript arguments.
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //    arg0 - extension ID as a string
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //    arg1 - API call name as a string
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //    arg2 - arguments to the API call
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //    arg3 - any extra logging info as a string (optional)
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static void LogAPICall(const v8::FunctionCallbackInfo<v8::Value>& args);
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // This is ultimately invoked in bindings.js with JavaScript arguments.
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //    arg0 - extension ID as a string
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //    arg1 - Event name as a string
37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //    arg2 - Event arguments
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  //    arg3 - any extra logging info as a string (optional)
39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static void LogEvent(const v8::FunctionCallbackInfo<v8::Value>& args);
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // LogAPICall and LogEvent are really the same underneath except for
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // how they are ultimately dispatched to the log.
43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static void LogInternal(const CallType call_type,
44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)                          const v8::FunctionCallbackInfo<v8::Value>& args);
45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(APIActivityLogger);
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)};
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace extensions
50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif  // EXTENSIONS_RENDERER_API_ACTIVITY_LOGGER_H_
52