15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <mshtmcid.h> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/file_util.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/test_file_util.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/scoped_bstr.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/scoped_variant.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/win/windows_version.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/url_constants.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/test/chrome_frame_test_utils.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/test/chrome_frame_ui_test_utils.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/test/mock_ie_event_sink_actions.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome_frame/test/mock_ie_event_sink_test.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome_frame/test/simulate_input.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gmock_mutant.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::_; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::InSequence; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::StrCaseEq; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using testing::StrEq; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome_frame_test { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This parameterized test fixture uses the MockIEEventSink and is used by 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// UI-related tests. 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FullTabUITest : public MockIEEventSinkTest, 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public testing::TestWithParam<CFInvocation> { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FullTabUITest() {} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResetKeyState(); 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These are UI-related tests, so we do not care about the exact requests 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and navigations that occur. 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(GetParam()); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ie_mock_.ExpectAnyNavigations(); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void TearDown() { 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ResetKeyState(); 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ResetKeyState() { 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Call this to reset the state of any current keyboard modifiers, as it has 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // been observed that these tests can leave the desktop in an invalid state 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // (e.g. thinking that the Ctrl key is held down). Send F23 as that is 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // particularly unlikely to be used by any real application. 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) simulate_input::SendMnemonic( 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VK_F23, 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) simulate_input::CONTROL | simulate_input::SHIFT | simulate_input::ALT, 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) simulate_input::KEY_UP); 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Instantiate each test case for the IE case and for CF meta tag case. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// It does not seem too useful to also run the CF http header case since these 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are UI, not navigation tests. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(IE, FullTabUITest, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Values(CFInvocation::None())); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)INSTANTIATE_TEST_CASE_P(CF, FullTabUITest, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::Values(CFInvocation::MetaTag())); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests keyboard input. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(FullTabUITest, KeyboardInput) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GetParam().invokes_cf()) { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "Test not implemented for this configuration."; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring key_event_url = GetTestUrl(L"keyevent.html"); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) static const char input[] = "chrome"; 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(), StrEq(key_event_url))) 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .WillOnce(PostKeyMessagesToRenderer(&ie_mock_, input)); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnMessage(StrCaseEq(UTF8ToWide(input)), _, _)) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(key_event_url); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests keyboard shortcuts for back and forward. 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://code.google.com/p/chromium/issues/detail?id=114058 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(FullTabUITest, DISABLED_KeyboardBackForward) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsWorkstationLocked()) { 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "This test cannot be run in a locked workstation."; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring page1 = GetSimplePageUrl(); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring page2 = GetLinkPageUrl(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool in_cf = GetParam().invokes_cf(); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This test performs the following steps. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 1. Launches IE and navigates to page1 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2. It then navigates to page2 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 3. Sends the VK_BACK keystroke to IE, which should navigate back to 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // page 1 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 4. Sends the Shift + VK_BACK keystroke to IE which should navigate 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // forward to page2 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page1))) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Navigate(&ie_mock_, page2)); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) short bkspace = VkKeyScanA(VK_BACK); // NOLINT 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page2))) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetFocusToRenderer(&ie_mock_), 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelaySendScanCode(&loop_, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromSeconds(1), 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bkspace, 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) simulate_input::NONE))); 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page1))) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetFocusToRenderer(&ie_mock_), 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelaySendScanCode(&loop_, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromSeconds(1), 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bkspace, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) simulate_input::SHIFT))); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(in_cf, StrEq(page2))) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIENavigateAndLoop(page1, kChromeFrameVeryLongNavigationTimeout); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests new window behavior with ctrl+N. 137c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_P(FullTabUITest, CtrlN) { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsWorkstationLocked()) { 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "This test cannot be run in a locked workstation."; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_cf = GetParam().invokes_cf(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_cf) { 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "Test not implemented for this configuration."; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Ideally we want to use a ie_mock_ to watch for finer grained 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // events for New Window, but for Crl+N we don't get any 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // OnNewWindowX notifications. :( 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockWindowObserver win_observer_mock; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* kNewWindowTitlePattern = "*Internet Explorer*"; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(is_cf, StrEq(GetSimplePageUrl()))) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WatchWindow(&win_observer_mock, kNewWindowTitlePattern, ""), 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetFocusToRenderer(&ie_mock_), 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelaySendChar(&loop_, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromSeconds(1), 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'n', 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) simulate_input::CONTROL))); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Watch for new window. It appears that the window close message cannot be 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // reliably delivered immediately upon receipt of the window open event. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowOpen(_)) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(2)) 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::Return()); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowClose(_)) 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(2)); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIENavigateAndLoop(GetSimplePageUrl(), 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kChromeFrameVeryLongNavigationTimeout); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that Ctrl+F opens the Find dialog. 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_P(FullTabUITest, CtrlF) { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsWorkstationLocked()) { 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "This test cannot be run in a locked workstation."; 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_cf = GetParam().invokes_cf(); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!is_cf) { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "Test not implemented for this configuration."; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockWindowObserver win_observer_mock; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* kFindDialogCaption = "Find"; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(IN_CF, StrEq(GetSimplePageUrl()))) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WatchWindow(&win_observer_mock, kFindDialogCaption, ""), 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetFocusToRenderer(&ie_mock_), 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelaySendChar(&loop_, 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMilliseconds(1500), 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'f', 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) simulate_input::CONTROL))); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowOpen(_)) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIENavigateAndLoop(GetSimplePageUrl(), 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kChromeFrameVeryLongNavigationTimeout); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that ctrl+r does cause a refresh. 211c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_P(FullTabUITest, CtrlR) { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsWorkstationLocked()) { 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "This test cannot be run in a locked workstation."; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(server_mock_, Get(_, UrlPathEq(GetSimplePageUrl()), _)) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(2)) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(SendResponse(&server_mock_, GetParam())); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(), 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StrEq(GetSimplePageUrl()))) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(2)) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetFocusToRenderer(&ie_mock_), 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelaySendChar(&loop_, 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromSeconds(1), 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'r', 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) simulate_input::CONTROL), 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayCloseBrowserMock( 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &loop_, base::TimeDelta::FromSeconds(4), &ie_mock_))) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillRepeatedly(testing::Return()); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIENavigateAndLoop(GetSimplePageUrl(), 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kChromeFrameVeryLongNavigationTimeout); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test window close with ctrl+w. 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_P(FullTabUITest, CtrlW) { 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsWorkstationLocked()) { 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "This test cannot be run in a locked workstation."; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(), 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StrEq(GetSimplePageUrl()))) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetFocusToRenderer(&ie_mock_), 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelaySendChar(&loop_, 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromSeconds(1), 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 'w', 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) simulate_input::CONTROL))); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIENavigateAndLoop(GetSimplePageUrl(), 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kChromeFrameVeryLongNavigationTimeout); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test address bar navigation with Alt+d and URL. 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky due to TypeUrlInAddressBar; see http://crbug.com/124244. 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_P(FullTabUITest, DISABLED_AltD) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsWorkstationLocked()) { 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "This test cannot be run in a locked workstation."; 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(), 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StrEq(GetSimplePageUrl()))) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetFocusToRenderer(&ie_mock_), 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TypeUrlInAddressBar(&loop_, 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetLinkPageUrl(), 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromMilliseconds(1500)))); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(), 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StrEq(GetLinkPageUrl()))) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIENavigateAndLoop(GetSimplePageUrl(), 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kChromeFrameVeryLongNavigationTimeout); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that the renderer has focus after navigation. 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Flaky, see http://crbug.com/90791 . 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(FullTabUITest, DISABLED_RendererHasFocus) { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(GetParam().invokes_cf(), 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StrEq(GetSimplePageUrl()))) 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRendererHasFocus(&ie_mock_), 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseBrowserMock(&ie_mock_))); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(GetSimplePageUrl()); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that view source works. 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(FullTabUITest, ViewSource) { 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Please see http://code.google.com/p/chromium/issues/detail?id=60987 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for more information on why this test is disabled for Vista with IE7. 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base::win::GetVersion() == base::win::VERSION_VISTA && 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetInstalledIEVersion() == IE_7) { 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Not running test on Vista with IE7"; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool in_cf = GetParam().invokes_cf(); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!in_cf) { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "Test not implemented for this configuration."; 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockIEEventSink view_source_mock; 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_source_mock.ExpectAnyNavigations(); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // After navigation invoke view soruce action using IWebBrowser2::ExecWB 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VARIANT empty = base::win::ScopedVariant::kEmptyVariant; 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(in_cf, 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) StrEq(GetSimplePageUrl()))) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(DelayExecCommand( 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &ie_mock_, &loop_, base::TimeDelta(), &CGID_MSHTML, 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<OLECMDID>(IDM_VIEWSOURCE), 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OLECMDEXECOPT_DONTPROMPTUSER, &empty, &empty)); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expect notification for view-source window, handle new window event 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and attach a new ie_mock_ to the received web browser 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring view_source_url; 325868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) view_source_url += UTF8ToWide(content::kViewSourceScheme); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_source_url += L":"; 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_source_url += GetSimplePageUrl(); 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring url_in_new_window = kChromeProtocolPrefix; 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_in_new_window += view_source_url; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ie_mock_.ExpectNewWindow(&view_source_mock); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For some reason this happens occasionally at least on XP IE7. 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(view_source_mock, OnLoad(IN_IE, StrEq(url_in_new_window))) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(view_source_mock, OnLoad(in_cf, StrEq(view_source_url))) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyAddressBarUrlWithGcf(&view_source_mock), 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseBrowserMock(&view_source_mock))); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(view_source_mock, OnQuit()) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)) 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(GetSimplePageUrl()); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void NavigateToCurrentUrl(MockIEEventSink* mock) { 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IWebBrowser2* browser = mock->event_sink()->web_browser2(); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(browser); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::win::ScopedBstr bstr; 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HRESULT hr = browser->get_LocationURL(bstr.Receive()); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_HRESULT_SUCCEEDED(hr); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (SUCCEEDED(hr)) { 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(bstr.Length()); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VARIANT empty = base::win::ScopedVariant::kEmptyVariant; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) hr = browser->Navigate(bstr, &empty, &empty, &empty, &empty); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_HRESULT_SUCCEEDED(hr); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests that Chrome gets re-instantiated after crash if we reload via 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// the address bar or via a new navigation. 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(FullTabUITest, TabCrashReload) { 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using testing::DoAll; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GetParam().invokes_cf()) { 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "Test needs CF."; 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockPropertyNotifySinkListener prop_listener; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(_, StrEq(GetSimplePageUrl()))) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(DoAll( 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRendererHasFocus(&ie_mock_), 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectDocumentReadystate(&ie_mock_, READYSTATE_COMPLETE), 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConnectDocPropNotifySink(&ie_mock_, &prop_listener), 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KillChromeFrameProcesses())); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(prop_listener, OnChanged(DISPID_READYSTATE)) 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(DoAll( 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectDocumentReadystate(&ie_mock_, READYSTATE_UNINITIALIZED), 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayNavigateToCurrentUrl( 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &ie_mock_, &loop_, base::TimeDelta::FromMilliseconds(10)))); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(_, StrEq(GetSimplePageUrl()))) 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(GetSimplePageUrl()); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tests if Chrome gets restarted after a crash by just refreshing the document. 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// DISABLED as per bug http://crbug.com/99317 (one of the failures is a 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// timeout, which marking as FLAKY or FAILS won't mask). 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(FullTabUITest, DISABLED_TabCrashRefresh) { 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) using testing::DoAll; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!GetParam().invokes_cf()) { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(ERROR) << "Test needs CF."; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockPropertyNotifySinkListener prop_listener; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(_, StrEq(GetSimplePageUrl()))) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(DoAll( 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectRendererHasFocus(&ie_mock_), 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectDocumentReadystate(&ie_mock_, READYSTATE_COMPLETE), 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ConnectDocPropNotifySink(&ie_mock_, &prop_listener), 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) KillChromeFrameProcesses())); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VARIANT empty = base::win::ScopedVariant::kEmptyVariant; 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(prop_listener, OnChanged(/*DISPID_READYSTATE*/_)) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(DoAll( 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DisconnectDocPropNotifySink(&prop_listener), 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectDocumentReadystate(&ie_mock_, READYSTATE_UNINITIALIZED), 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DelayExecCommand( 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &ie_mock_, &loop_, base::TimeDelta::FromMilliseconds(10), 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<GUID*>(NULL), OLECMDID_REFRESH, 0, &empty, &empty))); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(_, StrEq(GetSimplePageUrl()))) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(GetSimplePageUrl()); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test that window.print() on a page results in the native Windows print dialog 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// appearing rather than Chrome's in-page print preview. 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_P(FullTabUITest, WindowPrintOpensNativePrintDialog) { 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring window_print_url(GetTestUrl(L"window_print.html")); 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring window_print_title(L"window.print"); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const bool is_cf = GetParam().invokes_cf(); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockWindowObserver win_observer_mock; 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When the page is loaded, start watching for the Print dialog to appear. 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(is_cf, StrEq(window_print_url))) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(WatchWindow(&win_observer_mock, "Print", "")); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When the print dialog opens, close it. 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowOpen(_)) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(DoCloseWindow()); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // When the print dialog closes, close the browser. 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowClose(_)) 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Launch IE and navigate to the window_print.html page, which will 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // window.print() immediately after loading. 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(window_print_url); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test fixture for tests related to the context menu UI. Since the context 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// menus for CF and IE are different, these tests are not parameterized. 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContextMenuTest : public MockIEEventSinkTest, public testing::Test { 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContextMenuTest(): kTextFieldInitValue(L"SomeInitializedTextValue") {} 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() { 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context_menu_page_url = GetTestUrl(L"context_menu.html"); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context_menu_page_title = L"context menu"; 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Clear clipboard to make sure there is no effect from previous tests. 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetClipboardText(L""); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These are UI-related tests, so we do not care about the exact 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // navigations that occur. 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ie_mock_.ExpectAnyNavigations(); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(_, _)).Times(testing::AnyNumber()); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccDocLoad(_)).Times(testing::AnyNumber()); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4737dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual void TearDown() { 4747dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Destroy the clipboard here because it is not destroyed automatically. 4757dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DestroyClipboard(); 4767dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 4777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Common helper function for "Save xxx As" tests. 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DoSaveAsTest(const wchar_t* role, const wchar_t* menu_item_name, 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* file_ext) { 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockWindowObserver win_observer_mock; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open 'Save As' dialog. 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* kSaveDlgCaption = "Save As"; 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(L"Save As download test"))) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WatchWindow(&win_observer_mock, kSaveDlgCaption, ""), 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccRightClick(AccObjectMatcher(L"", role)))); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(menu_item_name))); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Get safe download name using temporary file. 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath temp_file_path; 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(file_util::CreateTemporaryFile(&temp_file_path)); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(file_util::DieFileDie(temp_file_path, false)); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_file_path = temp_file_path.ReplaceExtension(file_ext); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccObjectMatcher file_name_box(L"File name:", L"editable text"); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowOpen(_)) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccSendCharMessage(file_name_box, L'a'), 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccSetValue(file_name_box, temp_file_path.value()), 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccDoDefaultAction(AccObjectMatcher(L"Save", L"push button")))); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowClose(_)) 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseWhenFileSaved(&ie_mock_, temp_file_path, 8000)); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIENavigateAndLoop(GetTestUrl(L"save_as_context_menu.html"), 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kChromeFrameVeryLongNavigationTimeout); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(file_util::DieFileDie(temp_file_path, false)); 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Html page that holds a text field for context menu testing. 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring context_menu_page_url; 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Title of said html page. 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring context_menu_page_title; 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is the text value used to test cut/copy/paste etc. 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring kTextFieldInitValue; 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) testing::NiceMock<MockAccEventObserver> acc_observer_; 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test reloading from the context menu. 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContextMenuTest, CFReload) { 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(GetSimplePageTitle()))) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(OpenContextMenuAsync()); 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Reload"))); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(IN_CF, StrEq(GetSimplePageUrl()))) 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(GetSimplePageUrl()); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test view source from the context menu. 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContextMenuTest, CFViewSource) { 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Please see http://code.google.com/p/chromium/issues/detail?id=60987 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for more information on why this test is disabled for Vista with IE7. 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base::win::GetVersion() == base::win::VERSION_VISTA && 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetInstalledIEVersion() == IE_7) { 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Not running test on Vista with IE7"; 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockIEEventSink view_source_mock; 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_source_mock.ExpectAnyNavigations(); 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // View the page source. 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(GetSimplePageTitle()))) 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(OpenContextMenuAsync()); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"View page source"))); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expect notification for view-source window, handle new window event 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and attach a new ie_mock_ to the received web browser 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring view_source_url; 568868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) view_source_url += UTF8ToWide(content::kViewSourceScheme); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_source_url += L":"; 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) view_source_url += GetSimplePageUrl(); 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring url_in_new_window = kChromeProtocolPrefix; 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url_in_new_window += view_source_url; 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ie_mock_.ExpectNewWindow(&view_source_mock); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For some reason this happens occasionally at least on XP IE7 and Win7 IE8. 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(view_source_mock, OnLoad(IN_IE, StrEq(url_in_new_window))) 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)); 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(view_source_mock, OnLoad(IN_CF, StrEq(view_source_url))) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyAddressBarUrlWithGcf(&view_source_mock), 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseBrowserMock(&view_source_mock))); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(view_source_mock, OnQuit()) 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)) 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(GetSimplePageUrl()); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContextMenuTest, DISABLED_CFPageInfo) { 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockWindowObserver win_observer_mock; 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // View page information. 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(GetSimplePageTitle()))) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WatchWindow(&win_observer_mock, "", "Chrome_WidgetWin_*"), 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenContextMenuAsync())); 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"View page info"))); 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowOpen(_)).Times(1); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Expect page info dialog to pop up. Dismiss the dialog with 'Esc' key 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowOpen(_)) 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(DoCloseWindow()); 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowClose(_)).Times(1); 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowClose(_)) 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(GetSimplePageUrl()); 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContextMenuTest, CFInspector) { 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockWindowObserver win_observer_mock; 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open developer tools. 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Devtools begins life with "Untitled" caption and it changes 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // later to the 'Developer Tools - <url> form. 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* kPageInfoCaptionPattern = "Untitled*"; 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(GetSimplePageTitle()))) 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WatchWindow(&win_observer_mock, kPageInfoCaptionPattern, ""), 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenContextMenuAsync())); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Inspect element"))); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowOpen(_)) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(DelayDoCloseWindow(5000)); // wait to catch possible crash 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(win_observer_mock, OnWindowClose(_)) 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIENavigateAndLoop(GetSimplePageUrl(), 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kChromeFrameVeryLongNavigationTimeout); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://code.google.com/p/chromium/issues/detail?id=83114 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContextMenuTest, DISABLED_CFSavePageAs) { 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Please see http://code.google.com/p/chromium/issues/detail?id=60987 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for more information on why this test is disabled for Vista with IE7. 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base::win::GetVersion() == base::win::VERSION_VISTA && 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetInstalledIEVersion() == IE_7) { 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Not running test on Vista with IE7"; 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(DoSaveAsTest(L"", L"Save as...", L".html")); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://code.google.com/p/chromium/issues/detail?id=83114 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContextMenuTest, DISABLED_CFSaveLinkAs) { 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Please see http://code.google.com/p/chromium/issues/detail?id=60987 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for more information on why this test is disabled for Vista with IE7. 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base::win::GetVersion() == base::win::VERSION_VISTA && 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetInstalledIEVersion() == IE_7) { 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Not running test on Vista with IE7"; 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NO_FATAL_FAILURE(DoSaveAsTest(L"link", L"Save link as...", L".zip")); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This tests that the about:version page can be opened via the CF context menu. 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContextMenuTest, CFAboutVersionLoads) { 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Please see http://code.google.com/p/chromium/issues/detail?id=60987 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // for more information on why this test is disabled for Vista with IE7. 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (base::win::GetVersion() == base::win::VERSION_VISTA && 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetInstalledIEVersion() == IE_7) { 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Not running test on Vista with IE7"; 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* kAboutVersionUrl = L"gcf:about:version"; 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* kAboutVersionWithoutProtoUrl = L"about:version"; 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockIEEventSink new_window_mock; 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_window_mock.ExpectAnyNavigations(); 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(GetSimplePageTitle()))) 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(OpenContextMenuAsync()); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"About*"))); 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ie_mock_.ExpectNewWindow(&new_window_mock); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For some reason this happens occasionally at least on Win7 IE8. 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(new_window_mock, OnLoad(IN_IE, StrEq(kAboutVersionUrl))) 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)); 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(new_window_mock, 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnLoad(IN_CF, StrEq(kAboutVersionWithoutProtoUrl))) 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyAddressBarUrlWithGcf(&new_window_mock), 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseBrowserMock(&new_window_mock))); 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(new_window_mock, OnQuit()) 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)) 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(GetSimplePageUrl()); 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContextMenuTest, IEOpen) { 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::None()); 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open the link through the context menu. 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(GetLinkPageTitle()))) 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccRightClick(AccObjectMatcher(L"", L"link"))); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Open"))); 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(GetSimplePageUrl()))) 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyAddressBarUrl(&ie_mock_), 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseBrowserMock(&ie_mock_))); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(GetLinkPageUrl()); 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContextMenuTest, IEOpenInNewWindow) { 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // See crbug.com/64794. 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GetInstalledIEVersion() == IE_7) { 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG(INFO) << "Not running test with IE7"; 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::None()); 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockIEEventSink new_window_mock; 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_window_mock.ExpectAnyNavigations(); 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Open the link in a new window. 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(GetLinkPageTitle()))) 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccRightClick(AccObjectMatcher(L"", L"link"))); 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Open in New Window"))); 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ie_mock_.ExpectNewWindow(&new_window_mock); 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(new_window_mock, OnLoad(IN_IE, StrEq(GetSimplePageUrl()))) 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(kkania): Verifying the address bar is flaky with this, at least 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // on XP ie6. Fix. 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&new_window_mock)); 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(new_window_mock, OnQuit()) 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(1)) 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(GetLinkPageUrl()); 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test Back/Forward from context menu. 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContextMenuTest, IEBackForward) { 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::None()); 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring page1 = GetLinkPageUrl(); 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring title1 = GetLinkPageTitle(); 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring page2 = GetSimplePageUrl(); 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring title2 = GetSimplePageTitle(); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to second page. 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccDocLoad(TabContentsTitleEq(title1))) 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(Navigate(&ie_mock_, page2)); 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Go back. 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccDocLoad(TabContentsTitleEq(title2))) 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPageLoad(&ie_mock_, IN_IE, page2), 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenContextMenuAsync())); 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Back"))); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Go forward. 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccDocLoad(TabContentsTitleEq(title1))) 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPageLoad(&ie_mock_, IN_IE, page1), 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenContextMenuAsync())); 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Forward"))); 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(IN_IE, StrEq(page2))) 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(page1); 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test CF link context menu - Open link in new window. 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Failing intermittently on IE6/7. See crbug.com/64794. 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContextMenuTest, DISABLED_CFOpenLinkInNewWindow) { 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockIEEventSink new_window_mock; 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new_window_mock.ExpectAnyNavigations(); 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoke 'Open link in new window' context menu item. 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(GetLinkPageTitle()))) 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(2)) 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccRightClick(AccObjectMatcher(L"", L"link"))) 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::Return()); 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Open link in new window*"))); 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ie_mock_.ExpectNewWindow(&new_window_mock); 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(new_window_mock, OnLoad(IN_CF, StrEq(GetSimplePageUrl()))) 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&new_window_mock)); 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(new_window_mock, OnQuit()) 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(GetLinkPageUrl()); 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test CF link context menu - Copy link address. 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContextMenuTest, CFCopyLinkAddress) { 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoke 'Copy link address' context menu item. 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(GetLinkPageTitle()))) 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccRightClick(AccObjectMatcher(L"", L"link"))); 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccLeftClick(AccObjectMatcher(L"Copy link address*")), 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseBrowserMock(&ie_mock_))); 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(GetLinkPageUrl()); 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(GetSimplePageUrl().c_str(), GetClipboardText().c_str()); 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test CF text field context menu - cut. 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Times out sporadically http://crbug.com/119660. 8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ContextMenuTest, DISABLED_CFTxtFieldCut) { 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccObjectMatcher txtfield_matcher(L"", L"editable text"); 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoke "Cut" context menu item of text field. 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(context_menu_page_title))) 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccRightClick(txtfield_matcher), 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccWatchForOneValueChange(&acc_observer_, txtfield_matcher))); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Cut*"))); 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that text field is empty after cut operation. 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(L""))) 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(context_menu_page_url); 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that the text value has been cut to clipboard. 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(kTextFieldInitValue.c_str(), GetClipboardText().c_str()); 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test CF text field context menu - copy. 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Times out sporadically http://crbug.com/119660. 8582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ContextMenuTest, DISABLED_CFTxtFieldCopy) { 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccObjectMatcher txtfield_matcher(L"", L"editable text"); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoke "Copy" context menu item of text field. 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(context_menu_page_title))) 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccRightClick(txtfield_matcher), 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccWatchForOneValueChange(&acc_observer_, txtfield_matcher))); 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccLeftClick(AccObjectMatcher(L"Copy*")), 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseBrowserMock(&ie_mock_))); 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that there is no change on text field value after copy operation. 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, _)) 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .Times(testing::AtMost(0)); 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(context_menu_page_url); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that the text value has been copied to clipboard. 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_STREQ(kTextFieldInitValue.c_str(), GetClipboardText().c_str()); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test CF text field context menu - paste. 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Times out sporadically http://crbug.com/119660. 8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ContextMenuTest, DISABLED_CFTxtFieldPaste) { 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccObjectMatcher txtfield_matcher(L"", L"editable text"); 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoke "Paste" context menu item of text field. 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(context_menu_page_title))) 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccRightClick(txtfield_matcher), 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccWatchForOneValueChange(&acc_observer_, txtfield_matcher))); 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Paste*"))); 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that value has been pasted to text field. 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(kTextFieldInitValue))) 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set some text value to clipboard, this is to emulate the 'copy' action. 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetClipboardText(kTextFieldInitValue); 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(context_menu_page_url); 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test CF text field context menu - delete. 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Times out sporadically http://crbug.com/119660. 9082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ContextMenuTest, DISABLED_CFTxtFieldDelete) { 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccObjectMatcher txtfield_matcher(L"", L"editable text"); 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoke 'Delete' context menu item of text field. 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(context_menu_page_title))) 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccRightClick(txtfield_matcher), 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccWatchForOneValueChange(&acc_observer_, txtfield_matcher))); 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Delete*"))); 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that value has been deleted from text field. 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(L""))) 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(context_menu_page_url); 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test CF text field context menu - select all. 9282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Flaky: http://crbug.com/144664 9292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ContextMenuTest, DISABLED_CFTxtFieldSelectAll) { 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoke 'Select all' context menu item of text field. 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(context_menu_page_title))) 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccRightClick(AccObjectMatcher(L"", L"editable text"))); 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccLeftClick(AccObjectMatcher(L"Select all*")), 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PostMessageToCF(&ie_mock_, L"selectall"))); 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Client side script verifies that the text field value has been selected, 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // then send 'OK' message. 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnMessage(testing::StrCaseEq(L"OK"), _, _)) 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(context_menu_page_url + L"?action=selectall"); 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test CF text field context menu - undo. 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Times out sporadically http://crbug.com/119660. 9502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ContextMenuTest, DISABLED_CFTxtFieldUndo) { 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccObjectMatcher txtfield_matcher(L"", L"editable text"); 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Change the value of text field to 'A'. 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(context_menu_page_title))) 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccWatchForOneValueChange(&acc_observer_, txtfield_matcher), 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccSendCharMessage(txtfield_matcher, L'A'))); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bring up the context menu once the value has changed. 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(L"A"))) 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccRightClick(txtfield_matcher)); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Then select "Undo". 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccWatchForOneValueChange(&acc_observer_, txtfield_matcher), 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccLeftClick(AccObjectMatcher(L"Undo*")))); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that value has been reset to initial value after undo operation. 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(kTextFieldInitValue))) 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(context_menu_page_url); 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test CF text field context menu - redo. 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Times out sporadically http://crbug.com/119660. 9782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ContextMenuTest, DISABLED_CFTxtFieldRedo) { 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeAnyRequests(CFInvocation::MetaTag()); 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccObjectMatcher txtfield_matcher(L"", L"editable text"); 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Change text field from its initial value to 'A'. 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnAccDocLoad(TabContentsTitleEq(context_menu_page_title))) 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccWatchForOneValueChange(&acc_observer_, txtfield_matcher), 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccSendCharMessage(txtfield_matcher, L'A'))); 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Bring up the context menu. 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(L"A"))) 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccRightClick(txtfield_matcher)); 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Select "Undo" 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccWatchForOneValueChange(&acc_observer_, txtfield_matcher), 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccLeftClick(AccObjectMatcher(L"Undo*")))); 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // After undo operation is done, bring up the context menu again. 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(kTextFieldInitValue))) 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccRightClick(txtfield_matcher)); 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Select "Redo" 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccWatchForOneValueChange(&acc_observer_, txtfield_matcher), 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AccLeftClick(AccObjectMatcher(L"Redo*")))); 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify that text field value is reset to its changed value 'A' and exit. 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccValueChange(_, _, StrEq(L"A"))) 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIEAndNavigate(context_menu_page_url); 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Disabled because it seems to hang, causing the test process to timeout and 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// be killed; see http://crbug.com/121097. 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContextMenuTest, DISABLED_CFBackForward) { 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring page1 = GetLinkPageUrl(); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring title1 = GetLinkPageTitle(); 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring page2 = GetSimplePageUrl(); 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring title2 = GetSimplePageTitle(); 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring page3 = GetTestUrl(L"anchor.html"); 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring title3 = GetAnchorPageTitle(); 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeRequestWithCardinality( 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFInvocation::MetaTag(), page1, testing::Exactly(2)); 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeRequestWithCardinality( 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFInvocation::None(), page2, testing::Exactly(3)); 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) server_mock_.ExpectAndServeRequestWithCardinality( 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CFInvocation::MetaTag(), page3, testing::Exactly(2)); 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InSequence expect_in_sequence_for_scope; 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to second page. 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccDocLoad(TabContentsTitleEq(title1))) 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPageLoad(&ie_mock_, IN_CF, page1), 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Navigate(&ie_mock_, page2))); 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigate to third page. 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccDocLoad(TabContentsTitleEq(title2))) 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPageLoad(&ie_mock_, IN_IE, page2), 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Navigate(&ie_mock_, page3))); 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Go back. 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccDocLoad(TabContentsTitleEq(title3))) 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPageLoad(&ie_mock_, IN_CF, page3), 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenContextMenuAsync())); 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Back"))); 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Go back 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccDocLoad(TabContentsTitleEq(title2))) 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPageLoad(&ie_mock_, IN_IE, page2), 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenContextMenuAsync())); 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Back"))); 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Go forward. 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccDocLoad(TabContentsTitleEq(title1))) 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPageLoad(&ie_mock_, IN_CF, page1), 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenContextMenuAsync())); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Forward"))); 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Go forward. 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnAccDocLoad(TabContentsTitleEq(title2))) 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(testing::DoAll( 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) VerifyPageLoad(&ie_mock_, IN_IE, page2), 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OpenContextMenuAsync())); 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(acc_observer_, OnMenuPopup(_)) 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(AccLeftClick(AccObjectMatcher(L"Forward"))); 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_CALL(ie_mock_, OnLoad(IN_CF, StrEq(page3))) 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .WillOnce(CloseBrowserMock(&ie_mock_)); 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LaunchIENavigateAndLoop(page1, kChromeFrameVeryLongNavigationTimeout); 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace chrome_frame_test 1090