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_TEST_CHROMEDRIVER_LOGGING_H_ 6#define CHROME_TEST_CHROMEDRIVER_LOGGING_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/memory/scoped_ptr.h" 12#include "base/memory/scoped_vector.h" 13#include "base/values.h" 14#include "chrome/test/chromedriver/chrome/log.h" 15 16struct Capabilities; 17class CommandListener; 18class DevToolsEventListener; 19class ListValue; 20struct Session; 21class Status; 22 23// Accumulates WebDriver Logging API entries of a given type and minimum level. 24// See https://code.google.com/p/selenium/wiki/Logging. 25class WebDriverLog : public Log { 26 public: 27 static const char kBrowserType[]; 28 static const char kDriverType[]; 29 static const char kPerformanceType[]; 30 31 // Converts WD wire protocol level name -> Level, false on bad name. 32 static bool NameToLevel(const std::string& name, Level* out_level); 33 34 // Creates a WebDriverLog with the given type and minimum level. 35 WebDriverLog(const std::string& type, Level min_level); 36 virtual ~WebDriverLog(); 37 38 // Returns entries accumulated so far, as a ListValue ready for serialization 39 // into the wire protocol response to the "/log" command. 40 // The caller assumes ownership of the ListValue, and the WebDriverLog 41 // creates and owns a new empty ListValue for further accumulation. 42 scoped_ptr<base::ListValue> GetAndClearEntries(); 43 44 // Finds the first error message in the log and returns it. If none exist, 45 // returns an empty string. Does not clear entries. 46 std::string GetFirstErrorMessage() const; 47 48 // Translates a Log entry level into a WebDriver level and stores the entry. 49 virtual void AddEntryTimestamped(const base::Time& timestamp, 50 Level level, 51 const std::string& source, 52 const std::string& message) OVERRIDE; 53 54 const std::string& type() const; 55 void set_min_level(Level min_level); 56 Level min_level() const; 57 58 private: 59 const std::string type_; // WebDriver log type. 60 Level min_level_; // Minimum level of entries to store. 61 scoped_ptr<base::ListValue> entries_; // Accumulated entries. 62 63 DISALLOW_COPY_AND_ASSIGN(WebDriverLog); 64}; 65 66// Initializes logging system for ChromeDriver. Returns true on success. 67bool InitLogging(); 68 69// Creates |Log|s, |DevToolsEventListener|s, and |CommandListener|s based on 70// logging preferences. 71Status CreateLogs(const Capabilities& capabilities, 72 const Session* session, 73 ScopedVector<WebDriverLog>* out_logs, 74 ScopedVector<DevToolsEventListener>* out_devtools_listeners, 75 ScopedVector<CommandListener>* out_command_listeners); 76 77#endif // CHROME_TEST_CHROMEDRIVER_LOGGING_H_ 78