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