Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(192)

Unified Diff: chrome/browser/apps/app_window_intercept_all_keys_uitest.cc

Issue 1316013004: Remove "API proposal for chrome.app.window to intercept all keys." (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync to TOT Created 5 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/app/generated_resources.grd ('k') | chrome/browser/ui/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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());
- }
- }
-}
« no previous file with comments | « chrome/app/generated_resources.grd ('k') | chrome/browser/ui/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698