diff options
author | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-16 07:58:05 +0000 |
---|---|---|
committer | ananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-10-16 07:58:05 +0000 |
commit | f46aff6ee482e56eb3e885c65cd8d5989ac133af (patch) | |
tree | 256e4da27837872305dde8cc7ef668189439e4b1 /chrome/test/ui/npapi_uitest.cpp | |
parent | ddc5288912f95a6cc89e93db5ef2c779b4a88838 (diff) | |
download | chromium_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/ui/npapi_uitest.cpp')
-rw-r--r-- | chrome/test/ui/npapi_uitest.cpp | 160 |
1 files changed, 75 insertions, 85 deletions
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 |