#include "chrome/test/chromedriver/util.h"
#include "base/base64.h"
-#include "base/file_util.h"
#include "base/files/file_enumerator.h"
+#include "base/files/file_util.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/browser_info.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/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();
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);
+}