1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#ifndef CHROME_TEST_CHROMEDRIVER_LOGGING_H_ 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define CHROME_TEST_CHROMEDRIVER_LOGGING_H_ 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 8b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include <string> 9b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 10b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/basictypes.h" 11b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_vector.h" 13b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "base/values.h" 14b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "chrome/test/chromedriver/chrome/log.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)struct Capabilities; 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass CommandListener; 18b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class DevToolsEventListener; 19b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class ListValue; 2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)struct Session; 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class Status; 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Accumulates WebDriver Logging API entries of a given type and minimum level. 24b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)// See https://code.google.com/p/selenium/wiki/Logging. 25b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)class WebDriverLog : public Log { 26b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) public: 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kBrowserType[]; 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kDriverType[]; 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const char kPerformanceType[]; 30b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Converts WD wire protocol level name -> Level, false on bad name. 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static bool NameToLevel(const std::string& name, Level* out_level); 33b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Creates a WebDriverLog with the given type and minimum level. 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) WebDriverLog(const std::string& type, Level min_level); 36b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual ~WebDriverLog(); 37b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Returns entries accumulated so far, as a ListValue ready for serialization 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // into the wire protocol response to the "/log" command. 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // The caller assumes ownership of the ListValue, and the WebDriverLog 41868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // creates and owns a new empty ListValue for further accumulation. 42b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) scoped_ptr<base::ListValue> GetAndClearEntries(); 43b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Finds the first error message in the log and returns it. If none exist, 455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // returns an empty string. Does not clear entries. 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string GetFirstErrorMessage() const; 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Translates a Log entry level into a WebDriver level and stores the entry. 49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void AddEntryTimestamped(const base::Time& timestamp, 50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) Level level, 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& source, 52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const std::string& message) OVERRIDE; 53b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const std::string& type() const; 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) void set_min_level(Level min_level); 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Level min_level() const; 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 58b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) private: 59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) const std::string type_; // WebDriver log type. 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) Level min_level_; // Minimum level of entries to store. 61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) scoped_ptr<base::ListValue> entries_; // Accumulated entries. 62b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 63b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(WebDriverLog); 64b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)}; 65b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Initializes logging system for ChromeDriver. Returns true on success. 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)bool InitLogging(); 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Creates |Log|s, |DevToolsEventListener|s, and |CommandListener|s based on 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// logging preferences. 71b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)Status CreateLogs(const Capabilities& capabilities, 7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const Session* session, 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ScopedVector<WebDriverLog>* out_logs, 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ScopedVector<DevToolsEventListener>* out_devtools_listeners, 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ScopedVector<CommandListener>* out_command_listeners); 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif // CHROME_TEST_CHROMEDRIVER_LOGGING_H_ 78