summaryrefslogtreecommitdiffstats
path: root/chrome/test
diff options
context:
space:
mode:
authorananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-16 07:58:05 +0000
committerananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2008-10-16 07:58:05 +0000
commitf46aff6ee482e56eb3e885c65cd8d5989ac133af (patch)
tree256e4da27837872305dde8cc7ef668189439e4b1 /chrome/test
parentddc5288912f95a6cc89e93db5ef2c779b4a88838 (diff)
downloadchromium_src-f46aff6ee482e56eb3e885c65cd8d5989ac133af.zip
chromium_src-f46aff6ee482e56eb3e885c65cd8d5989ac133af.tar.gz
chromium_src-f46aff6ee482e56eb3e885c65cd8d5989ac133af.tar.bz2
This fixes http://code.google.com/p/chromium/issues/detail?id=146&,
which was an issue with navigation attempts initiated by Flash not working correctly in Chrome. The plugin would initiate a navigation in response to a user click. This would eventually result in a call to a script on the page, which would query the history in a timer, and would end up resetting the selected URL to the original URL as the history length would not be updated as yet. The reason being the following:- 1. A Frame navigation is initiated by the renderer in response to the user click. 2. This is sent as an async message to the browser UI thread. 3. When the navigation in the browser completes we update the history info in render view asynchronously. The fix is to attempt to update the history count when we receive notifications from webkit. These include notifications for items being added to the history, navigations based on history (like history.back/forward/goto, etc). These counts continue to be updated as before from the browser as well. Added UI tests to test these cases. Bug=146 R=jam Review URL: http://codereview.chromium.org/7412 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@3457 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/test')
-rw-r--r--chrome/test/data/History/HistoryHelper.js55
-rw-r--r--chrome/test/data/History/history_length_test1.html66
-rw-r--r--chrome/test/data/History/history_length_test2.html33
-rw-r--r--chrome/test/ui/history_uitest.cc58
-rw-r--r--chrome/test/ui/npapi_uitest.cpp160
-rw-r--r--chrome/test/ui/ui_test.cc36
-rw-r--r--chrome/test/ui/ui_test.h13
-rw-r--r--chrome/test/ui/ui_tests.vcproj24
8 files changed, 352 insertions, 93 deletions
diff --git a/chrome/test/data/History/HistoryHelper.js b/chrome/test/data/History/HistoryHelper.js
new file mode 100644
index 0000000..93e0a94
--- /dev/null
+++ b/chrome/test/data/History/HistoryHelper.js
@@ -0,0 +1,55 @@
+//
+// This script provides some mechanics for testing History
+//
+function onSuccess(name, id)
+{
+ setTimeout(onFinished, 0, name, id, "OK");
+}
+
+function onFailure(name, id, status)
+{
+ setTimeout(onFinished, 0, name, id, status);
+}
+
+// Finish running a test by setting the status
+// and the cookie.
+function onFinished(name, id, result)
+{
+ var statusPanel = document.getElementById("statusPanel");
+ if (statusPanel) {
+ statusPanel.innerHTML = result;
+ }
+
+ var cookie = name + "." + id + ".status=" + result + "; path=/";
+ document.cookie = cookie;
+}
+
+function readCookie(name) {
+ var cookie_name = name + "=";
+ var ca = document.cookie.split(';');
+
+ for(var i = 0 ; i < ca.length ; i++) {
+ var c = ca[i];
+ while (c.charAt(0) == ' ') {
+ c = c.substring(1,c.length);
+ }
+ if (c.indexOf(cookie_name) == 0) {
+ return c.substring(cookie_name.length, c.length);
+ }
+ }
+ return null;
+}
+
+function createCookie(name,value,days) {
+ var expires = "";
+ if (days) {
+ var date = new Date();
+ date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
+ expires = "; expires=" + date.toGMTString();
+ }
+ document.cookie = name+"="+value+expires+"; path=/";
+}
+
+function eraseCookie(name) {
+ createCookie(name, "", -1);
+}
diff --git a/chrome/test/data/History/history_length_test1.html b/chrome/test/data/History/history_length_test1.html
new file mode 100644
index 0000000..4a44fa9
--- /dev/null
+++ b/chrome/test/data/History/history_length_test1.html
@@ -0,0 +1,66 @@
+<html>
+<head><title>History test1</title>
+<script src="HistoryHelper.js"></script>
+</head>
+
+<body onload="onLoad();">
+<div id="statusPanel" style="border: 1px solid red; width: 100%">
+History Test1 running....
+</body>
+
+<SCRIPT type="text/javascript">
+var first_run_cookie = "First_History_Test_Run";
+var second_run_cookie = "Second_History_Test_Run";
+
+function onLoad() {
+ if (readCookie(second_run_cookie) != null) {
+ setTimeout(OnValidateHistoryForSecondRun, 100);
+ return true;
+ }
+
+ if (readCookie(first_run_cookie) != null) {
+ setTimeout(OnMoveForwardInHistory, 100);
+ return true;
+ }
+
+ setTimeout(OnNavigateToPage2, 100);
+ return true;
+}
+
+function OnValidateHistoryForSecondRun() {
+ eraseCookie(first_run_cookie);
+ eraseCookie(second_run_cookie);
+
+ if (window.history.length != 2) {
+ onFailure("History_Length_Test", 1, "Second run history length mismatch");
+ return false;
+ }
+
+ onSuccess("History_Length_Test", 1);
+ return true;
+}
+
+function OnMoveForwardInHistory() {
+ if (window.history.length != 2) {
+ onFailure("History_Length_Test", 1, "History length mismatch");
+ return false;
+ }
+
+ createCookie(second_run_cookie, "1", "1");
+ window.history.forward();
+ return true;
+}
+
+function OnNavigateToPage2() {
+ if (window.history.length != 2) {
+ onFailure("History_Length_Test", 1, "History length mismatch");
+ return false;
+ }
+
+ createCookie(first_run_cookie, "1", "1");
+ window.location.href = "history_length_test2.html";
+ return true;
+}
+
+</SCRIPT>
+</html> \ No newline at end of file
diff --git a/chrome/test/data/History/history_length_test2.html b/chrome/test/data/History/history_length_test2.html
new file mode 100644
index 0000000..2bae3ac
--- /dev/null
+++ b/chrome/test/data/History/history_length_test2.html
@@ -0,0 +1,33 @@
+<html>
+<head><title>History test2</title>
+<script src="HistoryHelper.js"></script>
+</head>
+
+<body onload="onLoad();">
+<div id="statusPanel" style="border: 1px solid red; width: 100%">
+History test2....
+<div id="Div1" style="border: 1px solid red; width: 100%">
+</body>
+
+<SCRIPT type="text/javascript">
+function onLoad() {
+ setTimeout(OnValidateHistoryLength, 100);
+}
+
+function OnValidateHistoryLength() {
+ if (window.history.length != 3) {
+ onFailure("History_Length_Test", 1, "History length mismatch");
+ alert(window.history.length);
+ return false;
+ }
+
+ window.history.back();
+ return true;
+}
+
+function OnEchoHistory() {
+ alert(window.history.length);
+}
+
+</SCRIPT>
+</html> \ No newline at end of file
diff --git a/chrome/test/ui/history_uitest.cc b/chrome/test/ui/history_uitest.cc
new file mode 100644
index 0000000..931024f
--- /dev/null
+++ b/chrome/test/ui/history_uitest.cc
@@ -0,0 +1,58 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+// History UI tests
+
+#include "base/file_util.h"
+#include "chrome/common/chrome_paths.h"
+#include "chrome/test/automation/tab_proxy.h"
+#include "chrome/test/ui/ui_test.h"
+#include "net/base/net_util.h"
+
+const char kTestCompleteCookie[] = "status";
+const char kTestCompleteSuccess[] = "OK";
+const int kShortWaitTimeout = 5 * 1000;
+
+class HistoryTester : public UITest {
+ protected:
+ HistoryTester() : UITest() { }
+
+ virtual void SetUp() {
+ show_window_ = true;
+ UITest::SetUp();
+ }
+};
+
+TEST_F(HistoryTester, VerifyHistoryLength) {
+ std::wstring test_case = L"history_length_test1.html";
+ GURL url = GetTestUrl(L"History", test_case);
+ NavigateToURL(url);
+ WaitForFinish("History_Length_Test", "1", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+}
diff --git a/chrome/test/ui/npapi_uitest.cpp b/chrome/test/ui/npapi_uitest.cpp
index b48d011..525e48e 100644
--- a/chrome/test/ui/npapi_uitest.cpp
+++ b/chrome/test/ui/npapi_uitest.cpp
@@ -53,8 +53,8 @@
const char kTestCompleteCookie[] = "status";
const char kTestCompleteSuccess[] = "OK";
-const int kLongWaitTimeout = 30*1000;
-const int kShortWaitTimeout = 5*1000;
+const int kLongWaitTimeout = 30 * 1000;
+const int kShortWaitTimeout = 5 * 1000;
std::ostream& operator<<(std::ostream& out, const CComBSTR &str)
{
@@ -66,7 +66,6 @@ std::ostream& operator<<(std::ostream& out, const CComBSTR &str)
return out << szFinal;
}
-
class NPAPITester : public UITest {
protected:
NPAPITester() : UITest()
@@ -93,49 +92,6 @@ class NPAPITester : public UITest {
UITest::TearDown();
}
-protected:
- // Generate the URL for testing a particular test.
- // HTML for the tests is all located in test_directory\npapi\<testcase>
- GURL GetTestUrl(const std::wstring &test_case) {
- std::wstring path;
- PathService::Get(chrome::DIR_TEST_DATA, &path);
- file_util::AppendToPath(&path, L"npapi");
- file_util::AppendToPath(&path, test_case);
- return net::FilePathToFileURL(path);
- }
-
- // Waits for the test case to finish.
- // ASSERTS if there are test failures.
- void WaitForFinish(const std::string &name, const std::string &id,
- const GURL &url, const int wait_time)
- {
- const int kSleepTime = 250; // 4 times per second
- const int kMaxIntervals = wait_time / kSleepTime;
-
- scoped_ptr<TabProxy> tab(GetActiveTab());
-
- std::string done_str;
- for (int i = 0; i < kMaxIntervals; ++i) {
- Sleep(kSleepTime);
-
- // The webpage being tested has javascript which sets a cookie
- // which signals completion of the test. The cookie name is
- // a concatenation of the test name and the test id. This allows
- // us to run multiple tests within a single webpage and test
- // that they all c
- std::string cookieName = name;
- cookieName.append(".");
- cookieName.append(id);
- cookieName.append(".");
- cookieName.append(kTestCompleteCookie);
- tab->GetCookieByName(url, cookieName, &done_str);
- if (!done_str.empty())
- break;
- }
-
- EXPECT_EQ(kTestCompleteSuccess, done_str);
- }
-
private:
std::wstring plugin_dll_;
};
@@ -151,49 +107,68 @@ class NPAPIVisiblePluginTester : public NPAPITester {
// Test passing arguments to a plugin.
TEST_F(NPAPITester, Arguments) {
std::wstring test_case = L"arguments.html";
- GURL url = GetTestUrl(test_case);
+ GURL url = GetTestUrl(L"npapi", test_case);
NavigateToURL(url);
- WaitForFinish("arguments", "1", url, kShortWaitTimeout);
+ WaitForFinish("arguments", "1", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
}
// Test invoking many plugins within a single page.
TEST_F(NPAPITester, ManyPlugins) {
std::wstring test_case = L"many_plugins.html";
- GURL url(GetTestUrl(test_case));
+ GURL url(GetTestUrl(L"npapi", test_case));
NavigateToURL(url);
- WaitForFinish("arguments", "1", url, kShortWaitTimeout);
- WaitForFinish("arguments", "2", url, kShortWaitTimeout);
- WaitForFinish("arguments", "3", url, kShortWaitTimeout);
- WaitForFinish("arguments", "4", url, kShortWaitTimeout);
- WaitForFinish("arguments", "5", url, kShortWaitTimeout);
- WaitForFinish("arguments", "6", url, kShortWaitTimeout);
- WaitForFinish("arguments", "7", url, kShortWaitTimeout);
- WaitForFinish("arguments", "8", url, kShortWaitTimeout);
- WaitForFinish("arguments", "9", url, kShortWaitTimeout);
- WaitForFinish("arguments", "10", url, kShortWaitTimeout);
- WaitForFinish("arguments", "11", url, kShortWaitTimeout);
- WaitForFinish("arguments", "12", url, kShortWaitTimeout);
- WaitForFinish("arguments", "13", url, kShortWaitTimeout);
- WaitForFinish("arguments", "14", url, kShortWaitTimeout);
- WaitForFinish("arguments", "15", url, kShortWaitTimeout);
+
+ WaitForFinish("arguments", "1", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "2", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "3", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "4", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "5", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "6", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "7", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "8", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "9", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "10", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "11", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "12", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "13", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "14", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
+ WaitForFinish("arguments", "15", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
}
// Test various calls to GetURL from a plugin.
TEST_F(NPAPITester, GetURL) {
std::wstring test_case = L"geturl.html";
- GURL url = GetTestUrl(test_case);
+ GURL url = GetTestUrl(L"npapi", test_case);
NavigateToURL(url);
- WaitForFinish("geturl", "1", url, kShortWaitTimeout);
+ WaitForFinish("geturl", "1", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
}
// Test various calls to GetURL for javascript URLs with
// non NULL targets from a plugin.
TEST_F(NPAPITester, GetJavaScriptURL) {
std::wstring test_case = L"get_javascript_url.html";
- GURL url = GetTestUrl(test_case);
+ GURL url = GetTestUrl(L"npapi", test_case);
NavigateToURL(url);
- WaitForFinish("getjavascripturl", "1", url, kShortWaitTimeout);
+ WaitForFinish("getjavascripturl", "1", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
}
@@ -202,27 +177,32 @@ TEST_F(NPAPITester, GetJavaScriptURL) {
// will crash.
TEST_F(NPAPITester, NPObjectProxy) {
std::wstring test_case = L"npobject_proxy.html";
- GURL url = GetTestUrl(test_case);
+ GURL url = GetTestUrl(L"npapi", test_case);
NavigateToURL(url);
- WaitForFinish("npobject_proxy", "1", url, kShortWaitTimeout);
+ WaitForFinish("npobject_proxy", "1", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
}
// Tests if a plugin executing a self deleting script using NPN_GetURL
// works without crashing or hanging
TEST_F(NPAPITester, SelfDeletePluginGetUrl) {
std::wstring test_case = L"self_delete_plugin_geturl.html";
- GURL url = GetTestUrl(test_case);
+ GURL url = GetTestUrl(L"npapi", test_case);
NavigateToURL(url);
- WaitForFinish("self_delete_plugin_geturl", "1", url, kShortWaitTimeout);
+ WaitForFinish("self_delete_plugin_geturl", "1", url,
+ kTestCompleteCookie, kTestCompleteSuccess,
+ kShortWaitTimeout);
}
// Tests if a plugin executing a self deleting script using Invoke
// works without crashing or hanging
TEST_F(NPAPITester, SelfDeletePluginInvoke) {
std::wstring test_case = L"self_delete_plugin_invoke.html";
- GURL url = GetTestUrl(test_case);
+ GURL url = GetTestUrl(L"npapi", test_case);
NavigateToURL(url);
- WaitForFinish("self_delete_plugin_invoke", "1", url, kShortWaitTimeout);
+ WaitForFinish("self_delete_plugin_invoke", "1", url,
+ kTestCompleteCookie, kTestCompleteSuccess,
+ kShortWaitTimeout);
}
// Tests if a plugin executing a self deleting script in the context of
@@ -231,9 +211,11 @@ TEST_F(NPAPIVisiblePluginTester, SelfDeletePluginInvokeInSynchronousPaint) {
if (!UITest::in_process_plugins() && !UITest::in_process_renderer()) {
show_window_ = true;
std::wstring test_case = L"execute_script_delete_in_paint.html";
- GURL url = GetTestUrl(test_case);
+ GURL url = GetTestUrl(L"npapi", test_case);
NavigateToURL(url);
- WaitForFinish("execute_script_delete_in_paint", "1", url, kShortWaitTimeout);
+ WaitForFinish("execute_script_delete_in_paint", "1", url,
+ kTestCompleteCookie, kTestCompleteSuccess,
+ kShortWaitTimeout);
}
}
@@ -241,9 +223,11 @@ TEST_F(NPAPIVisiblePluginTester, SelfDeletePluginInNewStream) {
if (!UITest::in_process_plugins() && !UITest::in_process_renderer()) {
show_window_ = true;
std::wstring test_case = L"self_delete_plugin_stream.html";
- GURL url = GetTestUrl(test_case);
+ GURL url = GetTestUrl(L"npapi", test_case);
NavigateToURL(url);
- WaitForFinish("self_delete_plugin_stream", "1", url, kShortWaitTimeout);
+ WaitForFinish("self_delete_plugin_stream", "1", url,
+ kTestCompleteCookie, kTestCompleteSuccess,
+ kShortWaitTimeout);
}
}
@@ -251,33 +235,39 @@ TEST_F(NPAPIVisiblePluginTester, SelfDeletePluginInNewStream) {
TEST_F(NPAPIVisiblePluginTester, VerifyPluginWindowRect) {
show_window_ = true;
std::wstring test_case = L"verify_plugin_window_rect.html";
- GURL url = GetTestUrl(test_case);
+ GURL url = GetTestUrl(L"npapi", test_case);
NavigateToURL(url);
- WaitForFinish("checkwindowrect", "1", url, kShortWaitTimeout);
+ WaitForFinish("checkwindowrect", "1", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
}
TEST_F(NPAPIVisiblePluginTester, VerifyNPObjectLifetimeTest) {
if (!UITest::in_process_plugins() && !UITest::in_process_renderer()) {
show_window_ = true;
std::wstring test_case = L"npobject_lifetime_test.html";
- GURL url = GetTestUrl(test_case);
+ GURL url = GetTestUrl(L"npapi", test_case);
NavigateToURL(url);
- WaitForFinish("npobject_lifetime_test", "1", url, kShortWaitTimeout);
+ WaitForFinish("npobject_lifetime_test", "1", url,
+ kTestCompleteCookie, kTestCompleteSuccess,
+ kShortWaitTimeout);
}
}
// Tests that we don't crash or assert if NPP_New fails
TEST_F(NPAPIVisiblePluginTester, NewFails) {
- GURL url = GetTestUrl(L"new_fails.html");
+ GURL url = GetTestUrl(L"npapi", L"new_fails.html");
NavigateToURL(url);
- WaitForFinish("new_fails", "1", url, kShortWaitTimeout);
+ WaitForFinish("new_fails", "1", url, kTestCompleteCookie,
+ kTestCompleteSuccess, kShortWaitTimeout);
}
TEST_F(NPAPIVisiblePluginTester, SelfDeletePluginInNPNEvaluate) {
if (!UITest::in_process_plugins() && !UITest::in_process_renderer()) {
- GURL url = GetTestUrl(L"execute_script_delete_in_npn_evaluate.html");
+ GURL url = GetTestUrl(L"npapi",
+ L"execute_script_delete_in_npn_evaluate.html");
NavigateToURL(url);
WaitForFinish("npobject_delete_plugin_in_evaluate", "1", url,
+ kTestCompleteCookie, kTestCompleteSuccess,
kShortWaitTimeout);
}
} \ No newline at end of file
diff --git a/chrome/test/ui/ui_test.cc b/chrome/test/ui/ui_test.cc
index 263b7b7..a9e799f 100644
--- a/chrome/test/ui/ui_test.cc
+++ b/chrome/test/ui/ui_test.cc
@@ -28,6 +28,7 @@
#include "chrome/test/automation/window_proxy.h"
#include "chrome/test/test_file_util.h"
#include "googleurl/src/gurl.h"
+#include "net/base/net_util.h"
bool UITest::in_process_renderer_ = false;
bool UITest::in_process_plugins_ = false;
@@ -586,5 +587,40 @@ void UITest::PrintResult(const std::wstring& measurement,
trace.c_str(), value, units.c_str());
}
+GURL UITest::GetTestUrl(const std::wstring& test_directory,
+ const std::wstring &test_case) {
+ std::wstring path;
+ PathService::Get(chrome::DIR_TEST_DATA, &path);
+ file_util::AppendToPath(&path, test_directory);
+ file_util::AppendToPath(&path, test_case);
+ return net::FilePathToFileURL(path);
+}
+
+void UITest::WaitForFinish(const std::string &name,
+ const std::string &id,
+ const GURL &url,
+ const std::string& test_complete_cookie,
+ const std::string& expected_cookie_value,
+ const int wait_time) {
+ const int kIntervalMilliSeconds = 50;
+ // The webpage being tested has javascript which sets a cookie
+ // which signals completion of the test. The cookie name is
+ // a concatenation of the test name and the test id. This allows
+ // us to run multiple tests within a single webpage and test
+ // that they all c
+ std::string cookie_name = name;
+ cookie_name.append(".");
+ cookie_name.append(id);
+ cookie_name.append(".");
+ cookie_name.append(test_complete_cookie);
+
+ scoped_ptr<TabProxy> tab(GetActiveTab());
+
+ bool test_result = WaitUntilCookieValue(tab.get(), url,
+ cookie_name.c_str(),
+ kIntervalMilliSeconds, wait_time,
+ expected_cookie_value.c_str());
+ EXPECT_EQ(true, test_result);
+}
diff --git a/chrome/test/ui/ui_test.h b/chrome/test/ui/ui_test.h
index 5752bc7..0027c97 100644
--- a/chrome/test/ui/ui_test.h
+++ b/chrome/test/ui/ui_test.h
@@ -273,6 +273,19 @@ class UITest : public testing::Test {
// error.
DictionaryValue* GetDefaultProfilePreferences();
+ // Generate the URL for testing a particular test.
+ // HTML for the tests is all located in
+ // test_root_directory\test_directory\<testcase>
+ static GURL GetTestUrl(const std::wstring& test_directory,
+ const std::wstring &test_case);
+
+ // Waits for the test case to finish.
+ // ASSERTS if there are test failures.
+ void WaitForFinish(const std::string &name,
+ const std::string &id, const GURL &url,
+ const std::string& test_complete_cookie,
+ const std::string& expected_cookie_value,
+ const int wait_time);
private:
// Check that no processes related to Chrome exist, displaying
// the given message if any do.
diff --git a/chrome/test/ui/ui_tests.vcproj b/chrome/test/ui/ui_tests.vcproj
index d9eb832..9cbe00b 100644
--- a/chrome/test/ui/ui_tests.vcproj
+++ b/chrome/test/ui/ui_tests.vcproj
@@ -221,6 +221,14 @@
RelativePath="..\..\browser\browser_uitest.cc"
>
</File>
+ <Filter
+ Name="TestImages"
+ >
+ <File
+ RelativePath="..\..\browser\images_uitest.cc"
+ >
+ </File>
+ </Filter>
</Filter>
<Filter
Name="TestChromeLogging"
@@ -239,14 +247,6 @@
</File>
</Filter>
<Filter
- Name="TestImages"
- >
- <File
- RelativePath="..\..\browser\images_uitest.cc"
- >
- </File>
- </Filter>
- <Filter
Name="TestIFrame"
>
<File
@@ -522,6 +522,14 @@
>
</File>
</Filter>
+ <Filter
+ Name="TestHistory"
+ >
+ <File
+ RelativePath=".\history_uitest.cc"
+ >
+ </File>
+ </Filter>
</Files>
<Globals>
</Globals>