diff options
-rw-r--r-- | chrome/SConscript.ui_tests | 1 | ||||
-rw-r--r-- | chrome/renderer/render_view.cc | 8 | ||||
-rw-r--r-- | chrome/renderer/render_view.h | 2 | ||||
-rw-r--r-- | chrome/test/data/History/HistoryHelper.js | 55 | ||||
-rw-r--r-- | chrome/test/data/History/history_length_test1.html | 66 | ||||
-rw-r--r-- | chrome/test/data/History/history_length_test2.html | 33 | ||||
-rw-r--r-- | chrome/test/ui/history_uitest.cc | 58 | ||||
-rw-r--r-- | chrome/test/ui/npapi_uitest.cpp | 160 | ||||
-rw-r--r-- | chrome/test/ui/ui_test.cc | 36 | ||||
-rw-r--r-- | chrome/test/ui/ui_test.h | 13 | ||||
-rw-r--r-- | chrome/test/ui/ui_tests.vcproj | 24 | ||||
-rw-r--r-- | webkit/glue/webview_delegate.h | 3 | ||||
-rw-r--r-- | webkit/glue/webview_impl.cc | 1 |
13 files changed, 367 insertions, 93 deletions
diff --git a/chrome/SConscript.ui_tests b/chrome/SConscript.ui_tests index 6d8da76..68ce7c7 100644 --- a/chrome/SConscript.ui_tests +++ b/chrome/SConscript.ui_tests @@ -129,6 +129,7 @@ ui_test_files = [ 'test/ui/sandbox_uitests.cc', 'test/ui/ui_test.cc', 'test/ui/ui_test_suite.cc', + 'test/ui/history_uitest.cc', '$CHROME_DIR/test/test_file_util$OBJSUFFIX', '$NET_DIR/url_request/url_request_test_job$OBJSUFFIX', ] diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 0da4929..ef69bb6 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -2208,6 +2208,9 @@ WebHistoryItem* RenderView::GetHistoryEntryAtOffset(int offset) { } void RenderView::GoToEntryAtOffsetAsync(int offset) { + history_back_list_count_ += offset; + history_forward_list_count_ -= offset; + Send(new ViewHostMsg_GoToEntryAtOffset(routing_id_, offset)); } @@ -2548,6 +2551,11 @@ void RenderView::TransitionToCommittedForNewPage() { #endif } +void RenderView::DidAddHistoryItem() { + history_back_list_count_++; + history_forward_list_count_ = 0; +} + void RenderView::OnMessageFromExternalHost( const std::string& target, const std::string& message) { if (message.empty()) diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h index 51b9d93..a59f328 100644 --- a/chrome/renderer/render_view.h +++ b/chrome/renderer/render_view.h @@ -485,6 +485,8 @@ class RenderView : public RenderWidget, public WebViewDelegate, virtual void TransitionToCommittedForNewPage(); + virtual void DidAddHistoryItem(); + // A helper method used by WasOpenedByUserGesture. bool WasOpenedByUserGestureHelper() const; 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> diff --git a/webkit/glue/webview_delegate.h b/webkit/glue/webview_delegate.h index 4db62be..15e93ba 100644 --- a/webkit/glue/webview_delegate.h +++ b/webkit/glue/webview_delegate.h @@ -716,6 +716,9 @@ class WebViewDelegate : virtual public WebWidgetDelegate { // will occur. virtual void TransitionToCommittedForNewPage() { } + // Called when an item was added to the history + virtual void DidAddHistoryItem() { } + WebViewDelegate() { } virtual ~WebViewDelegate() { } diff --git a/webkit/glue/webview_impl.cc b/webkit/glue/webview_impl.cc index 8bbe9c7..6697970 100644 --- a/webkit/glue/webview_impl.cc +++ b/webkit/glue/webview_impl.cc @@ -1494,6 +1494,7 @@ void WebViewImpl::didAddHistoryItem(WebCore::HistoryItem* item) { #ifndef NDEBUG new_navigation_loader_ = main_frame_->frame()->loader()->documentLoader(); #endif + delegate_->DidAddHistoryItem(); } void WebViewImpl::willGoToHistoryItem(WebCore::HistoryItem* item) { |