1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_RENDERER_EXTENSIONS_DOM_ACTIVITY_LOGGER_H_ 6 #define CHROME_RENDERER_EXTENSIONS_DOM_ACTIVITY_LOGGER_H_ 7 8 #include <string> 9 10 #include "base/strings/string_piece.h" 11 #include "third_party/WebKit/public/platform/WebString.h" 12 #include "third_party/WebKit/public/platform/WebURL.h" 13 #include "third_party/WebKit/public/web/WebDOMActivityLogger.h" 14 #include "url/gurl.h" 15 #include "v8/include/v8.h" 16 17 // Used to log DOM API calls from within WebKit. The events are sent via IPC to 18 // extensions::ActivityLog for recording and display. 19 namespace extensions { 20 21 class DOMActivityLogger: public blink::WebDOMActivityLogger { 22 public: 23 static const int kMainWorldId = 0; 24 explicit DOMActivityLogger(const std::string& extension_id); 25 26 // Marshalls the arguments into an ExtensionHostMsg_DOMAction_Params 27 // and sends it over to the browser (via IPC) for appending it to the 28 // extension activity log. 29 // (Overrides the log method in blink::WebDOMActivityLogger) 30 virtual void log(const blink::WebString& api_name, 31 int argc, 32 const v8::Handle<v8::Value> argv[], 33 const blink::WebString& call_type, 34 const blink::WebURL& url, 35 const blink::WebString& title); 36 37 // Check (using the WebKit API) if there is no logger attached to the world 38 // corresponding to world_id, and if so, construct a new logger and attach it. 39 // world_id = 0 indicates the main world. 40 static void AttachToWorld(int world_id, 41 const std::string& extension_id); 42 43 private: 44 std::string extension_id_; 45 46 DISALLOW_COPY_AND_ASSIGN(DOMActivityLogger); 47 }; 48 49 } // namespace extensions 50 51 #endif // CHROME_RENDERER_EXTENSIONS_DOM_ACTIVITY_LOGGER_H_ 52 53