Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / media / media_browsertest.cc
index b011ba4..98b07ae 100644 (file)
@@ -4,69 +4,84 @@
 
 #include "chrome/browser/media/media_browsertest.h"
 
-#include "base/path_service.h"
-#include "base/strings/stringprintf.h"
 #include "base/strings/utf_string_conversions.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tabs/tab_strip_model.h"
-#include "chrome/common/chrome_paths.h"
 #include "chrome/test/base/ui_test_utils.h"
+#include "content/public/browser/navigation_controller.h"
+#include "content/public/browser/navigation_entry.h"
+#include "content/public/browser/web_contents.h"
 #include "content/public/test/browser_test_utils.h"
+#include "media/base/test_data_util.h"
+#include "net/test/spawned_test_server/spawned_test_server.h"
 
 // Common test results.
 const char MediaBrowserTest::kEnded[] = "ENDED";
 const char MediaBrowserTest::kError[] = "ERROR";
 const char MediaBrowserTest::kFailed[] = "FAILED";
+const char MediaBrowserTest::kPluginCrashed[] = "PLUGIN_CRASHED";
 
-MediaBrowserTest::MediaBrowserTest() {
+MediaBrowserTest::MediaBrowserTest() : ignore_plugin_crash_(false) {
 }
 
 MediaBrowserTest::~MediaBrowserTest() {
 }
 
-void MediaBrowserTest::RunMediaTestPage(
-    const char* html_page, std::vector<StringPair>* query_params,
-    const char* expected_title, bool http) {
+void MediaBrowserTest::RunMediaTestPage(const std::string& html_page,
+                                        const base::StringPairs& query_params,
+                                        const std::string& expected_title,
+                                        bool http) {
   GURL gurl;
-  std::string query = "";
-  if (query_params != NULL && !query_params->empty()) {
-    std::vector<StringPair>::const_iterator itr = query_params->begin();
-    query = base::StringPrintf("%s=%s", itr->first, itr->second);
-    ++itr;
-    for (; itr != query_params->end(); ++itr) {
-      query.append(base::StringPrintf("&%s=%s", itr->first, itr->second));
-    }
-  }
+  std::string query = media::GetURLQueryString(query_params);
+  scoped_ptr<net::SpawnedTestServer> http_test_server;
   if (http) {
-    ASSERT_TRUE(test_server()->Start());
-    gurl = test_server()->GetURL(
-        base::StringPrintf("files/media/%s?%s", html_page, query.c_str()));
+    http_test_server.reset(
+        new net::SpawnedTestServer(net::SpawnedTestServer::TYPE_HTTP,
+                                   net::SpawnedTestServer::kLocalhost,
+                                   media::GetTestDataPath()));
+    CHECK(http_test_server->Start());
+    gurl = http_test_server->GetURL("files/" + html_page + "?" + query);
   } else {
-    base::FilePath test_file_path;
-    PathService::Get(chrome::DIR_TEST_DATA, &test_file_path);
-    test_file_path = test_file_path.AppendASCII("media")
-                                   .AppendASCII(html_page);
-    gurl = content::GetFileUrlWithQuery(test_file_path, query);
+    gurl = content::GetFileUrlWithQuery(media::GetTestDataFilePath(html_page),
+                                        query);
   }
-
-  string16 final_title = RunTest(gurl, expected_title);
-  EXPECT_EQ(ASCIIToUTF16(expected_title), final_title);
+  std::string final_title = RunTest(gurl, expected_title);
+  EXPECT_EQ(expected_title, final_title);
 }
 
-string16 MediaBrowserTest::RunTest(const GURL& gurl,
-                                   const char* expected_title) {
-  DVLOG(1) << "Running test URL: " << gurl;
+std::string MediaBrowserTest::RunTest(const GURL& gurl,
+                                      const std::string& expected_title) {
+  DVLOG(0) << "Running test URL: " << gurl;
+  // Observe the web contents for plugin crashes.
+  Observe(browser()->tab_strip_model()->GetActiveWebContents());
   content::TitleWatcher title_watcher(
       browser()->tab_strip_model()->GetActiveWebContents(),
-      ASCIIToUTF16(expected_title));
+      base::ASCIIToUTF16(expected_title));
   AddWaitForTitles(&title_watcher);
   ui_test_utils::NavigateToURL(browser(), gurl);
-
-  return title_watcher.WaitAndGetTitle();
+  base::string16 result = title_watcher.WaitAndGetTitle();
+  return base::UTF16ToASCII(result);
 }
 
 void MediaBrowserTest::AddWaitForTitles(content::TitleWatcher* title_watcher) {
-  title_watcher->AlsoWaitForTitle(ASCIIToUTF16(kEnded));
-  title_watcher->AlsoWaitForTitle(ASCIIToUTF16(kError));
-  title_watcher->AlsoWaitForTitle(ASCIIToUTF16(kFailed));
+  title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kEnded));
+  title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kError));
+  title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kFailed));
+  title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kPluginCrashed));
+}
+
+void MediaBrowserTest::PluginCrashed(const base::FilePath& plugin_path,
+                                     base::ProcessId plugin_pid) {
+  DVLOG(0) << "Plugin crashed: " << plugin_path.value();
+  if (ignore_plugin_crash_)
+    return;
+  // Update document title to quit TitleWatcher early.
+  web_contents()->GetController().GetActiveEntry()
+      ->SetTitle(base::ASCIIToUTF16(kPluginCrashed));
+  ADD_FAILURE() << "Failing test due to plugin crash.";
+}
+
+void MediaBrowserTest::IgnorePluginCrash() {
+  ignore_plugin_crash_ = true;
 }
+