Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / test / chromedriver / util.cc
index 454949e..3c1ab86 100644 (file)
@@ -9,17 +9,22 @@
 #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();
@@ -29,10 +34,10 @@ std::string GenerateId() {
 
 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) {
@@ -54,7 +59,7 @@ Status SendKeysOnWindow(
     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;
@@ -76,7 +81,7 @@ bool Base64Decode(const std::string& base64,
   // 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", &copy);
+  base::RemoveChars(copy, "\n", &copy);
   return base::Base64Decode(copy, bytes);
 }
 
@@ -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);
+}