Upstream version 11.39.250.0
[platform/framework/web/crosswalk.git] / src / chrome / test / chromedriver / util.cc
index 39dd768..d0d2416 100644 (file)
@@ -5,21 +5,26 @@
 #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();
@@ -90,7 +95,7 @@ Status UnzipArchive(const base::FilePath& unzip_dir,
 
   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))
@@ -401,3 +406,36 @@ Status UnzipSoleFile(const base::FilePath& 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);
+}