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

Unified Diff: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc

Issue 2208093004: Use focused RenderWidgetHostImpl instead of TextInputManager::GetActiveWidget() to obtain TextSelec… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing kenrb@'s comments Created 4 years, 4 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 | « content/browser/renderer_host/render_widget_host_view_aura.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
diff --git a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
index 56469f056cde1fad9ef325091ab76f4c4c38616c..f82453c165d152b18d42bef908f349be8d994345 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura_unittest.cc
@@ -76,6 +76,7 @@
#include "ui/aura/window.h"
#include "ui/aura/window_event_dispatcher.h"
#include "ui/aura/window_observer.h"
+#include "ui/base/clipboard/clipboard.h"
#include "ui/base/ui_base_types.h"
#include "ui/compositor/compositor.h"
#include "ui/compositor/layer_tree_owner.h"
@@ -163,7 +164,8 @@ class TestOverscrollDelegate : public OverscrollControllerDelegate {
class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
public:
- MockRenderWidgetHostDelegate() : rwh_(nullptr), is_fullscreen_(false) {}
+ MockRenderWidgetHostDelegate()
+ : rwh_(nullptr), is_fullscreen_(false), focused_widget_(nullptr) {}
~MockRenderWidgetHostDelegate() override {}
const NativeWebKeyboardEvent* last_event() const { return last_event_.get(); }
void set_widget_host(RenderWidgetHostImpl* rwh) { rwh_ = rwh; }
@@ -171,6 +173,13 @@ class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
TextInputManager* GetTextInputManager() override {
return &text_input_manager_;
}
+ RenderWidgetHostImpl* GetFocusedRenderWidgetHost(
+ RenderWidgetHostImpl* widget_host) override {
+ return !!focused_widget_ ? focused_widget_ : widget_host;
+ }
+ void set_focused_widget(RenderWidgetHostImpl* focused_widget) {
+ focused_widget_ = focused_widget;
+ }
protected:
// RenderWidgetHostDelegate:
@@ -194,6 +203,7 @@ class MockRenderWidgetHostDelegate : public RenderWidgetHostDelegate {
RenderWidgetHostImpl* rwh_;
bool is_fullscreen_;
TextInputManager text_input_manager_;
+ RenderWidgetHostImpl* focused_widget_;
DISALLOW_COPY_AND_ASSIGN(MockRenderWidgetHostDelegate);
};
@@ -568,11 +578,23 @@ class RenderWidgetHostViewAuraTest : public testing::Test {
protected:
BrowserContext* browser_context() { return browser_context_.get(); }
+ MockRenderWidgetHostDelegate* render_widget_host_delegate() const {
+ return delegates_.back().get();
+ }
+
// Sets the |view| active in TextInputManager with the given |type|. |type|
// cannot be ui::TEXT_INPUT_TYPE_NONE.
+ // Must not be called in the destruction path of |view|.
void ActivateViewForTextInputManager(RenderWidgetHostViewBase* view,
ui::TextInputType type) {
DCHECK_NE(ui::TEXT_INPUT_TYPE_NONE, type);
+ // First mock-focus the widget if not already.
+ if (render_widget_host_delegate()->GetFocusedRenderWidgetHost(
+ widget_host_) != view->GetRenderWidgetHost()) {
+ render_widget_host_delegate()->set_focused_widget(
+ RenderWidgetHostImpl::From(view->GetRenderWidgetHost()));
+ }
+
TextInputManager* manager =
static_cast<RenderWidgetHostImpl*>(view->GetRenderWidgetHost())
->delegate()
@@ -4233,10 +4255,6 @@ class InputMethodAuraTestBase : public RenderWidgetHostViewAuraTest {
}
protected:
- MockRenderWidgetHostDelegate* render_widget_host_delegate() const {
- return delegates_.back().get();
- }
-
ui::TextInputClient* text_input_client() const { return view_; }
bool has_composition_text() const {
@@ -4539,4 +4557,31 @@ TEST_F(InputMethodStateAuraTest, GetSelectionRange) {
}
}
+#if defined(USE_X11) && !defined(OS_CHROMEOS)
+// This test will verify that after selection, the selected text is written to
+// the clipboard from the focused widget.
+TEST_F(InputMethodStateAuraTest, SelectedTextCopiedToClipboard) {
+ ui::Clipboard* clipboard = ui::Clipboard::GetForCurrentThread();
+ EXPECT_TRUE(!!clipboard);
+ std::vector<std::string> texts = {"text0", "text1", "text2", "text3"};
+ for (auto index : active_view_sequence_) {
+ clipboard->Clear(ui::CLIPBOARD_TYPE_SELECTION);
+
+ // Focus the corresponding widget.
+ render_widget_host_delegate()->set_focused_widget(
+ RenderWidgetHostImpl::From(views_[index]->GetRenderWidgetHost()));
+
+ // Change the selection of the currently focused widget. It suffices to just
+ // call the method on the view.
+ base::string16 expected_text = base::ASCIIToUTF16(texts[index]);
+ views_[index]->SelectionChanged(expected_text, 0U, gfx::Range(0, 5));
+
+ // Retrieve the selected text from clipboard and verify it is as expected.
+ base::string16 result_text;
+ clipboard->ReadText(ui::CLIPBOARD_TYPE_SELECTION, &result_text);
+ EXPECT_EQ(expected_text, result_text);
+ }
+}
+#endif
+
} // namespace content
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_aura.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698