#include "base/files/file_enumerator.h"
#include "base/files/scoped_temp_dir.h"
#include "base/format_macros.h"
+#include "base/memory/scoped_vector.h"
#include "base/rand_util.h"
#include "base/strings/string16.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/third_party/icu/icu_utf.h"
#include "base/values.h"
+#include "chrome/test/chromedriver/chrome/chrome.h"
#include "chrome/test/chromedriver/chrome/status.h"
#include "chrome/test/chromedriver/chrome/ui_events.h"
+#include "chrome/test/chromedriver/chrome/version.h"
#include "chrome/test/chromedriver/chrome/web_view.h"
-#include "chrome/test/chromedriver/chrome/zip.h"
+#include "chrome/test/chromedriver/command_listener.h"
#include "chrome/test/chromedriver/key_converter.h"
+#include "chrome/test/chromedriver/session.h"
+#include "third_party/zlib/google/zip.h"
std::string GenerateId() {
uint64 msb = base::RandUint64();
namespace {
-Status FlattenStringArray(const base::ListValue* src, string16* dest) {
- string16 keys;
+Status FlattenStringArray(const base::ListValue* src, base::string16* dest) {
+ base::string16 keys;
for (size_t i = 0; i < src->GetSize(); ++i) {
- string16 keys_list_part;
+ base::string16 keys_list_part;
if (!src->GetString(i, &keys_list_part))
return Status(kUnknownError, "keys should be a string");
for (size_t j = 0; j < keys_list_part.size(); ++j) {
const base::ListValue* key_list,
bool release_modifiers,
int* sticky_modifiers) {
- string16 keys;
+ base::string16 keys;
Status status = FlattenStringArray(key_list, &keys);
if (status.IsError())
return status;
// Some WebDriver client base64 encoders follow RFC 1521, which require that
// 'encoded lines be no more than 76 characters long'. Just remove any
// newlines.
- RemoveChars(copy, "\n", ©);
+ base::RemoveChars(copy, "\n", ©);
return base::Base64Decode(copy, bytes);
}
base::FilePath archive = dir.path().AppendASCII("temp.zip");
int length = bytes.length();
- if (file_util::WriteFile(archive, bytes.c_str(), length) != length)
+ if (base::WriteFile(archive, bytes.c_str(), length) != length)
return Status(kUnknownError, "could not write file to temp dir");
if (!zip::Unzip(archive, unzip_dir))
*file = first_file;
return Status(kOk);
}
+
+Status NotifyCommandListenersBeforeCommand(Session* session,
+ const std::string& command_name) {
+ for (ScopedVector<CommandListener>::const_iterator it =
+ session->command_listeners.begin();
+ it != session->command_listeners.end();
+ ++it) {
+ Status status = (*it)->BeforeCommand(command_name);
+ if (status.IsError()) {
+ // Do not continue if an error is encountered. Mark session for deletion,
+ // quit Chrome if necessary, and return a detailed error.
+ if (!session->quit) {
+ session->quit = true;
+ std::string message = base::StringPrintf("session deleted because "
+ "error encountered when notifying listeners of '%s' command",
+ command_name.c_str());
+ if (session->chrome && !session->detach) {
+ Status quit_status = session->chrome->Quit();
+ if (quit_status.IsError())
+ message += ", but failed to kill browser:" + quit_status.message();
+ }
+ status = Status(kUnknownError, message, status);
+ }
+ if (session->chrome) {
+ const BrowserInfo* browser_info = session->chrome->GetBrowserInfo();
+ status.AddDetails("Session info: " + browser_info->browser_name + "=" +
+ browser_info->browser_version);
+ }
+ return status;
+ }
+ }
+ return Status(kOk);
+}