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