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

Unified Diff: chrome/browser/renderer_host/site_per_process_text_input_browsertest.cc

Issue 2901093003: Revert of Update TextSelection for non-user initiated events (Closed)
Patch Set: Created 3 years, 7 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 | « AUTHORS ('k') | content/browser/frame_host/render_frame_host_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/renderer_host/site_per_process_text_input_browsertest.cc
diff --git a/chrome/browser/renderer_host/site_per_process_text_input_browsertest.cc b/chrome/browser/renderer_host/site_per_process_text_input_browsertest.cc
index 4cd227706404746b0c0bc0def195fd5572ba938b..a06446b7ac41606c3d191efc851e72b01f240e52 100644
--- a/chrome/browser/renderer_host/site_per_process_text_input_browsertest.cc
+++ b/chrome/browser/renderer_host/site_per_process_text_input_browsertest.cc
@@ -24,7 +24,6 @@
#include "content/public/test/text_input_test_utils.h"
#include "net/dns/mock_host_resolver.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
-#include "ui/base/clipboard/clipboard.h"
#include "ui/base/ime/composition_underline.h"
#include "ui/base/ime/text_edit_commands.h"
#include "ui/base/ime/text_input_client.h"
@@ -143,6 +142,24 @@
DISALLOW_COPY_AND_ASSIGN(TextInputManagerTypeObserver);
};
+// This class observes TextInputManager for the first change in TextInputState.
+class TextInputManagerChangeObserver : public TextInputManagerObserverBase {
+ public:
+ explicit TextInputManagerChangeObserver(content::WebContents* web_contents)
+ : TextInputManagerObserverBase(web_contents) {
+ tester()->SetUpdateTextInputStateCalledCallback(base::Bind(
+ &TextInputManagerChangeObserver::VerifyChange, base::Unretained(this)));
+ }
+
+ private:
+ void VerifyChange() {
+ if (tester()->IsTextInputStateChanged())
+ OnSuccess();
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(TextInputManagerChangeObserver);
+};
+
// This class observes |TextInputState.type| for a specific RWHV.
class ViewTextInputTypeObserver : public TextInputManagerObserverBase {
public:
@@ -262,43 +279,20 @@
&TextSelectionObserver::VerifyChange, base::Unretained(this)));
}
- void WaitForSelectedText(const std::string& text,
- bool user_initiated = true) {
- expected_text_ = text;
- expected_user_initiated_ = user_initiated;
- if (last_selected_text_.has_value() &&
- last_selected_text_ == expected_text_ &&
- last_user_initiated_ == expected_user_initiated_) {
- OnSuccess();
- } else {
- Wait();
- }
+ void WaitForSelectedText(const std::string& text) {
+ selected_text_ = text;
+ Wait();
}
private:
void VerifyChange() {
- last_selected_text_ =
- base::UTF16ToUTF8(tester()->GetUpdatedView()->GetSelectedText());
- EXPECT_TRUE(tester()->GetTextSelectionUserInitiatedForView(
- tester()->GetUpdatedView(), &last_user_initiated_));
-
- // Check whether the expected values are already set.
- if (!expected_text_.has_value())
- return;
-
- if (last_selected_text_ == expected_text_ &&
- last_user_initiated_ == expected_user_initiated_) {
+ if (base::UTF16ToUTF8(tester()->GetUpdatedView()->GetSelectedText()) ==
+ selected_text_) {
OnSuccess();
}
}
- // These optional properties are also used to verify that the last and
- // expected properties are set.
- base::Optional<std::string> last_selected_text_;
- base::Optional<std::string> expected_text_;
-
- bool last_user_initiated_;
- bool expected_user_initiated_;
+ std::string selected_text_;
DISALLOW_COPY_AND_ASSIGN(TextSelectionObserver);
};
@@ -986,124 +980,6 @@
}
}
-// The following tests verify that the TextInputManager notifies about a
-// text selection change event, the corresponding |user_initiated| property
-// of TextSelection is valid, and the selection clipboard is updated
-// according to the source of the event.
-// See: https://crbug.com/671986
-
-// Test text selection change event for non-user initiated cases
-// (eg. JavaScript). Non-user initiated events should not update the selection
-// clipboard.
-IN_PROC_BROWSER_TEST_F(SitePerProcessTextInputManagerTest,
- NonUserInitiatedTextSelection) {
-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
- ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
- ASSERT_TRUE(clipboard);
- clipboard->Clear(ui::CLIPBOARD_TYPE_SELECTION);
-#endif
-
- CreateIframePage("a(b, c)");
- std::vector<std::string> values{"node_a", "node_b", "node_c"};
- std::vector<content::RenderFrameHost*> frames{GetFrame(IndexVector{}),
- GetFrame(IndexVector{0}),
- GetFrame(IndexVector{1})};
-
- for (size_t i = 0; i < frames.size(); ++i)
- AddInputFieldToFrame(frames[i], "text", values[i], true);
-
- // Test text selection from JavaScript across frames (non-user initiated).
- for (size_t i = 0; i < frames.size(); ++i) {
- // Trigger text selection.
- TextSelectionObserver trigger_observer(active_contents());
- EXPECT_TRUE(
- ExecuteScript(frames[i], "document.querySelector('input').select();"));
- trigger_observer.WaitForSelectedText(values[i], false);
-
-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
- // Non-user initiated text selection should not update the selection
- // clipboard. See: https://crbug.com/12392
- base::string16 result_text;
- clipboard->ReadText(ui::CLIPBOARD_TYPE_SELECTION, &result_text);
- EXPECT_TRUE(result_text.empty());
-#endif
-
- // Clear text selection.
- TextSelectionObserver clear_observer(active_contents());
- EXPECT_TRUE(ExecuteScript(frames[i], "document.getSelection().empty();"));
- clear_observer.WaitForSelectedText("", false);
- }
-}
-
-// Test text selection change event for user initiated cases (eg. key press)
-// User initiated events should update the selection clipboard where it is
-// supported.
-IN_PROC_BROWSER_TEST_F(SitePerProcessTextInputManagerTest,
- UserInitiatedTextSelection) {
-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
- ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
- ASSERT_TRUE(clipboard);
- clipboard->Clear(ui::CLIPBOARD_TYPE_SELECTION);
-#endif
-
- CreateIframePage("a(b, c)");
- std::vector<std::string> values{"node_a", "node_b", "node_c"};
- std::vector<content::RenderFrameHost*> frames{GetFrame(IndexVector{}),
- GetFrame(IndexVector{0}),
- GetFrame(IndexVector{1})};
-
- for (size_t i = 0; i < frames.size(); ++i)
- AddInputFieldToFrame(frames[i], "text", values[i], true);
-
- // Test text selection by user input across frames (user initiated).
- for (size_t i = 0; i < frames.size(); ++i) {
- // Focus on input element.
- std::string result;
- std::string script =
- "function getInputField() {"
- " return document.querySelector('input');"
- "}"
- "function onInputFocus(e) {"
- " domAutomationController.setAutomationId(0);"
- " domAutomationController.send(getInputField().value);"
- "}"
- "getInputField().addEventListener('focus', onInputFocus);";
- EXPECT_TRUE(ExecuteScript(frames[i], script));
- EXPECT_TRUE(ExecuteScriptAndExtractString(
- frames[i], "window.focus(); document.querySelector('input').focus();",
- &result));
- EXPECT_EQ(values[i], result);
- EXPECT_EQ(frames[i], active_contents()->GetFocusedFrame());
-
- // Press ctrl+a to select text in the input field.
- TextSelectionObserver trigger_observer(active_contents());
-#if !defined(OS_MACOSX)
- SimulateKeyPress(active_contents(), ui::DomKey::FromCharacter('A'),
- ui::DomCode::US_A, ui::VKEY_A, true, false, false, false);
-#else
- // On macOS the select all shortcut (Cmd+A) is handled by the browser via
- // keyboard accelerator. Thus we can't simulate key press on WebContents.
- // As a workaround, call the SelectAll directly as the shortcut would do.
- active_contents()->SelectAll();
-#endif
- trigger_observer.WaitForSelectedText(values[i], true);
-
-#if defined(USE_AURA) && defined(OS_LINUX) && !defined(OS_CHROMEOS)
- // User initiated text selection should update the selection clipboard.
- base::string16 result_text;
- clipboard->ReadText(ui::CLIPBOARD_TYPE_SELECTION, &result_text);
- EXPECT_EQ(base::ASCIIToUTF16(values[i]), result_text);
-#endif
-
- // Press down key to clear text selection.
- TextSelectionObserver clear_observer(active_contents());
- SimulateKeyPress(active_contents(), ui::DomKey::ARROW_DOWN,
- ui::DomCode::ARROW_DOWN, ui::VKEY_DOWN, false, false,
- false, false);
- clear_observer.WaitForSelectedText("", true);
- }
-}
-
// TODO(ekaramad): The following tests are specifically written for Aura and are
// based on InputMethodObserver. Write similar tests for Mac/Android/Mus
// (crbug.com/602723).
« no previous file with comments | « AUTHORS ('k') | content/browser/frame_host/render_frame_host_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698