| Index: chrome/browser/apps/app_window_intercept_all_keys_uitest.cc
|
| diff --git a/chrome/browser/apps/app_window_intercept_all_keys_uitest.cc b/chrome/browser/apps/app_window_intercept_all_keys_uitest.cc
|
| deleted file mode 100644
|
| index fd79de53f0c7d3bb52d836bdf724b5d09d4e3a68..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/apps/app_window_intercept_all_keys_uitest.cc
|
| +++ /dev/null
|
| @@ -1,365 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "base/callback.h"
|
| -#include "base/logging.h"
|
| -#include "base/macros.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "chrome/browser/apps/app_browsertest_util.h"
|
| -#include "chrome/test/base/interactive_test_utils.h"
|
| -#include "components/version_info/version_info.h"
|
| -#include "extensions/browser/app_window/native_app_window.h"
|
| -#include "extensions/test/extension_test_message_listener.h"
|
| -#include "testing/gtest/include/gtest/gtest-spi.h"
|
| -
|
| -using extensions::NativeAppWindow;
|
| -
|
| -class AppWindowInterceptAllKeysTest
|
| - : public extensions::PlatformAppBrowserTest {
|
| - public:
|
| - // Send key to window but does not wait till the key is actually in the input
|
| - // queue (like ui_test_utils::SendKeyPressToWindowSync()) as key will not be
|
| - // sent to hook when keyboard is intercepted.
|
| - bool SimulateKeyPress(ui::KeyboardCode key,
|
| - bool control,
|
| - bool shift,
|
| - bool alt,
|
| - bool command) {
|
| - DVLOG(1) << "Sending: " << key << " control = " << control
|
| - << " shift = " << shift << " alt = " << alt
|
| - << " command = " << command;
|
| - if (!ui_controls::SendKeyPressNotifyWhenDone(
|
| - GetFirstAppWindow()->GetNativeWindow(), key, control, shift, alt,
|
| - command, null_callback_)) {
|
| - LOG(WARNING) << "Failed to send key to app";
|
| - failure_message_ = "Failed to send key to app.";
|
| - return false;
|
| - }
|
| -
|
| - base::RunLoop().RunUntilIdle();
|
| - return !testing::Test::HasFatalFailure();
|
| - }
|
| -
|
| - bool SimulateKeyPress(ui::KeyboardCode key) {
|
| - return SimulateKeyPress(key, false, false, false, false);
|
| - }
|
| -
|
| - bool WaitForKeyEvent(ui::KeyboardCode code) {
|
| - std::string key_event = base::StringPrintf("KeyReceived: %d", code);
|
| - ExtensionTestMessageListener key_listener(key_event, false);
|
| -
|
| - if (!SimulateKeyPress(code)) {
|
| - failure_message_ = "Failed to send key to app";
|
| - return false;
|
| - }
|
| -
|
| - key_listener.WaitUntilSatisfied();
|
| -
|
| - DVLOG(1) << "Application ACK-ed keypress";
|
| - return true;
|
| - }
|
| -
|
| - bool LoadApplication(const char* app_path) {
|
| - DVLOG(1) << "Launching app = " << app_path;
|
| - LoadAndLaunchPlatformApp(app_path, "Launched");
|
| -
|
| - DVLOG(1) << "Validating that application is in focus";
|
| - // We start by making sure the window is actually focused.
|
| - if (!ui_test_utils::ShowAndFocusNativeWindow(
|
| - GetFirstAppWindow()->GetNativeWindow())) {
|
| - failure_message_ = "App did not get focus.";
|
| - return false;
|
| - }
|
| -
|
| - DVLOG(1) << "Launched application";
|
| - return true;
|
| - }
|
| -
|
| - void SendTaskSwitchKeys() {
|
| - // Send switch sequence (currently just for windows - will have to update as
|
| - // more platform support is added).
|
| - SimulateKeyPress(ui::VKEY_TAB, false, false, true, false);
|
| - }
|
| -
|
| - void ValidateCannotInterceptKeys(const char* app_path,
|
| - bool change_intercept,
|
| - bool enable_intercept) {
|
| - ExtensionTestMessageListener command_listener("readyForCommand", true);
|
| - ASSERT_TRUE(LoadApplication(app_path)) << failure_message_;
|
| -
|
| - const char* message = "";
|
| - if (change_intercept) {
|
| - message = enable_intercept ? "enable" : "disable";
|
| - }
|
| - ASSERT_TRUE(command_listener.WaitUntilSatisfied());
|
| - command_listener.Reply(message);
|
| - command_listener.Reset();
|
| -
|
| - ASSERT_TRUE(WaitForKeyEvent(ui::VKEY_Z)) << failure_message_;
|
| -
|
| - SendTaskSwitchKeys();
|
| -
|
| - // Send key and check if it is received.
|
| - ASSERT_FALSE(SimulateKeyPress(ui::VKEY_Z)) << failure_message_;
|
| - }
|
| -
|
| - void ValidateInterceptKeys(bool disable_after_enabling) {
|
| - ExtensionTestMessageListener command_listener("readyForCommand", true);
|
| - ASSERT_TRUE(LoadApplication(app_with_permission_)) << failure_message_;
|
| -
|
| - // setInterceptAllKeys() is asynchronous so wait for response and receiving
|
| - // a key back.
|
| - ASSERT_TRUE(command_listener.WaitUntilSatisfied());
|
| - command_listener.Reply("enable");
|
| - command_listener.Reset();
|
| -
|
| - ASSERT_TRUE(WaitForKeyEvent(ui::VKEY_Z)) << failure_message_;
|
| -
|
| - SendTaskSwitchKeys();
|
| -
|
| - // Send key and check if it is received.
|
| - ASSERT_TRUE(SimulateKeyPress(ui::VKEY_Z)) << failure_message_;
|
| -
|
| - ASSERT_TRUE(WaitForKeyEvent(ui::VKEY_Z)) << failure_message_;
|
| -
|
| - if (disable_after_enabling) {
|
| - ASSERT_TRUE(command_listener.WaitUntilSatisfied());
|
| - command_listener.Reply("disable");
|
| - command_listener.Reset();
|
| - ASSERT_TRUE(command_listener.WaitUntilSatisfied());
|
| - }
|
| - }
|
| -
|
| - protected:
|
| - std::string failure_message_;
|
| - base::Callback<void(void)> null_callback_;
|
| - const char* app_with_permission_ =
|
| - "window_api_intercept_all_keys/has_permission";
|
| - const char* app_without_permission_ =
|
| - "window_api_intercept_all_keys/no_permission";
|
| -};
|
| -
|
| -// Currently this is implemented only for Windows.
|
| -// Disabled test http://crbug.com/438209
|
| -#if defined(OS_WIN)
|
| -#define MAYBE_GetKeysAfterSwitchSequence DISABLED_GetKeysAfterSwitchSequence
|
| -#else
|
| -#define MAYBE_GetKeysAfterSwitchSequence DISABLED_GetKeysAfterSwitchSequence
|
| -#endif
|
| -
|
| -// Tests a window continues to keep focus even after application switch key
|
| -// sequence is sent when setInterceptAllKeys() is enabled.
|
| -IN_PROC_BROWSER_TEST_F(AppWindowInterceptAllKeysTest,
|
| - MAYBE_GetKeysAfterSwitchSequence) {
|
| - ValidateInterceptKeys(false);
|
| -}
|
| -
|
| -// Test to make sure that keys not received after disable.
|
| -// Disabled test http://crbug.com/438209
|
| -#if defined(OS_WIN)
|
| -#define MAYBE_NoKeysAfterDisableIsCalled DISABLED_NoKeysAfterDisableIsCalled
|
| -#else
|
| -#define MAYBE_NoKeysAfterDisableIsCalled DISABLED_NoKeysAfterDisableIsCalled
|
| -#endif
|
| -
|
| -IN_PROC_BROWSER_TEST_F(AppWindowInterceptAllKeysTest,
|
| - MAYBE_NoKeysAfterDisableIsCalled) {
|
| - ValidateInterceptKeys(true);
|
| -
|
| - ASSERT_TRUE(WaitForKeyEvent(ui::VKEY_Z)) << failure_message_;
|
| -
|
| - SendTaskSwitchKeys();
|
| -
|
| - // Send key and check if it is received.
|
| - ASSERT_FALSE(SimulateKeyPress(ui::VKEY_Z)) << failure_message_;
|
| -}
|
| -
|
| -// Test that calling just disable has no effect in retaining keyboard intercept.
|
| -// Currently this is implemented only for Windows.
|
| -// Disabled test http://crbug.com/438209
|
| -#if defined(OS_WIN)
|
| -#define MAYBE_NoopCallingDisableInterceptAllKeys \
|
| - DISABLED_NoopCallingDisableInterceptAllKeys
|
| -#else
|
| -#define MAYBE_NoopCallingDisableInterceptAllKeys \
|
| - DISABLED_NoopCallingDisableInterceptAllKeys
|
| -#endif
|
| -
|
| -IN_PROC_BROWSER_TEST_F(AppWindowInterceptAllKeysTest,
|
| - MAYBE_NoopCallingDisableInterceptAllKeys) {
|
| - ValidateCannotInterceptKeys(app_with_permission_, true, false);
|
| -}
|
| -
|
| -// Test no effect when called without permissions
|
| -// Currently this is implemented only for Windows.
|
| -#if defined(OS_WIN)
|
| -#define MAYBE_NoopCallingEnableWithoutPermission \
|
| - DISABLED_NoopCallingEnableWithoutPermission
|
| -#else
|
| -#define MAYBE_NoopCallingEnableWithoutPermission \
|
| - DISABLED_NoopCallingEnableWithoutPermission
|
| -#endif
|
| -
|
| -IN_PROC_BROWSER_TEST_F(AppWindowInterceptAllKeysTest,
|
| - MAYBE_NoopCallingEnableWithoutPermission) {
|
| - ValidateCannotInterceptKeys(app_without_permission_, true, true);
|
| -}
|
| -
|
| -// Test that intercept is disabled by default
|
| -#if defined(OS_WIN)
|
| -// Disabled test http://crbug.com/438209
|
| -#define MAYBE_InterceptDisabledByDefault DISABLED_InterceptDisabledByDefault
|
| -#else
|
| -#define MAYBE_InterceptDisabledByDefault DISABLED_InterceptDisabledByDefault
|
| -#endif
|
| -
|
| -IN_PROC_BROWSER_TEST_F(AppWindowInterceptAllKeysTest,
|
| - MAYBE_InterceptDisabledByDefault) {
|
| - ValidateCannotInterceptKeys(app_with_permission_, false, false);
|
| -}
|
| -
|
| -// Tests that the application cannot be loaded in stable.
|
| -IN_PROC_BROWSER_TEST_F(AppWindowInterceptAllKeysTest, CannotLoadOtherThanDev) {
|
| - version_info::Channel version_info[] = {
|
| - version_info::Channel::BETA, version_info::Channel::STABLE};
|
| - for (unsigned int index = 0; index < arraysize(version_info); index++) {
|
| - extensions::ScopedCurrentChannel channel(version_info[index]);
|
| - const extensions::Extension* extension = nullptr;
|
| - EXPECT_NONFATAL_FAILURE(
|
| - extension = LoadExtension(test_data_dir_.AppendASCII("platform_apps")
|
| - .AppendASCII(app_with_permission_)),
|
| - "");
|
| -
|
| - DVLOG(1) << "Finished loading extension";
|
| -
|
| - ASSERT_TRUE(extension == nullptr) << "Application loaded in"
|
| - << static_cast<int>(version_info[index])
|
| - << " while permission does not exist";
|
| - }
|
| -}
|
| -
|
| -// Inject different keyboard combos and make sure that the app get them all.
|
| -// Disabled test http://crbug.com/438209
|
| -#if defined(OS_WIN)
|
| -#define MAYBE_ValidateKeyEvent DISABLED_ValidateKeyEvent
|
| -#else
|
| -#define MAYBE_ValidateKeyEvent DISABLED_ValidateKeyEvent
|
| -#endif
|
| -
|
| -namespace {
|
| -// Maximum lenght of the result array in KeyEventTestData structure.
|
| -const size_t kMaxResultLength = 10;
|
| -
|
| -// A structure holding test data of a keyboard event.
|
| -// Each keyboard event may generate multiple result strings representing
|
| -// the result of keydown, keypress, keyup and textInput events.
|
| -// For keydown, keypress and keyup events, the format of the result string is:
|
| -// <type> <keyCode> <charCode> <ctrlKey> <shiftKey> <altKey> <commandKey>
|
| -// where <type> may be 'D' (keydown), 'P' (keypress) or 'U' (keyup).
|
| -// <ctrlKey>, <shiftKey> <altKey> and <commandKey> are boolean value indicating
|
| -// the state of corresponding modifier key.
|
| -struct KeyEventTestData {
|
| - ui::KeyboardCode key;
|
| - bool control;
|
| - bool shift;
|
| - bool alt;
|
| - bool command;
|
| -
|
| - int result_length;
|
| - const char* const result[kMaxResultLength];
|
| -};
|
| -} // namespace
|
| -
|
| -IN_PROC_BROWSER_TEST_F(AppWindowInterceptAllKeysTest, MAYBE_ValidateKeyEvent) {
|
| - // Launch the app
|
| - ValidateInterceptKeys(false);
|
| -
|
| - static const KeyEventTestData kValidateKeyEvents[] = {
|
| - // a
|
| - {ui::VKEY_A,
|
| - false,
|
| - false,
|
| - false,
|
| - false,
|
| - 3,
|
| - {"D 65 0 false false false false",
|
| - "P 97 97 false false false false",
|
| - "U 65 0 false false false false"}},
|
| - // shift+a
|
| - {ui::VKEY_A,
|
| - false,
|
| - true,
|
| - false,
|
| - false,
|
| - 5,
|
| - {"D 16 0 false true false false",
|
| - "D 65 0 false true false false",
|
| - "P 65 65 false true false false",
|
| - "U 65 0 false true false false",
|
| - "U 16 0 false true false false"}},
|
| - // ctrl+f which has accelerator binding should also result in all keys
|
| - // being
|
| - // sent.
|
| - {ui::VKEY_F,
|
| - true,
|
| - false,
|
| - false,
|
| - false,
|
| - 5,
|
| - {"D 17 0 true false false false",
|
| - "D 70 0 true false false false",
|
| - "P 6 6 true false false false",
|
| - "U 70 0 true false false false",
|
| - "U 17 0 true false false false"}},
|
| - // ctrl+z
|
| - {ui::VKEY_Z,
|
| - true,
|
| - false,
|
| - false,
|
| - false,
|
| - 5,
|
| - {"D 17 0 true false false false",
|
| - "D 90 0 true false false false",
|
| - "P 26 26 true false false false",
|
| - "U 90 0 true false false false",
|
| - "U 17 0 true false false false"}},
|
| - // alt+f
|
| - {ui::VKEY_F,
|
| - false,
|
| - false,
|
| - true,
|
| - false,
|
| - 4,
|
| - {"D 18 0 false false true false",
|
| - "D 70 0 false false true false",
|
| - "U 70 0 false false true false",
|
| - "U 18 0 false false true false"}},
|
| - // make sure both left and right shift makes it across
|
| - {ui::VKEY_RSHIFT,
|
| - false,
|
| - false,
|
| - false,
|
| - false,
|
| - 2,
|
| - {"D 16 0 false true false false", "U 16 0 false true false false"}},
|
| - };
|
| -
|
| - DVLOG(1) << "Starting keyboard input test";
|
| -
|
| - for (unsigned int index = 0; index < arraysize(kValidateKeyEvents); index++) {
|
| - // create all the event listeners needed
|
| - const KeyEventTestData* current_event = &kValidateKeyEvents[index];
|
| - scoped_ptr<ExtensionTestMessageListener> listeners[kMaxResultLength];
|
| - for (int i = 0; i < current_event->result_length; i++) {
|
| - listeners[i].reset(
|
| - new ExtensionTestMessageListener(current_event->result[i], false));
|
| - }
|
| - ASSERT_TRUE(SimulateKeyPress(current_event->key, current_event->control,
|
| - current_event->shift, current_event->alt,
|
| - current_event->command));
|
| - for (int i = 0; i < current_event->result_length; i++) {
|
| - EXPECT_TRUE(listeners[i]->WaitUntilSatisfied());
|
| - }
|
| - }
|
| -}
|
|
|