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

Side by Side Diff: chrome/browser/renderer_host/site_per_process_text_input_browsertest.cc

Issue 2166573003: Track TextInputState from multiple RenderWidgets in TextInputManager (Mac) (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Disabled SitePerProcessTextInputManagerTest.TrackTextSelectionForAllFrames on Mac since the corresp… 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 unified diff | Download patch
« no previous file with comments | « no previous file | chrome/test/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <vector> 5 #include <vector>
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/ui/browser.h" 9 #include "chrome/browser/ui/browser.h"
10 #include "chrome/browser/ui/tabs/tab_strip_model.h" 10 #include "chrome/browser/ui/tabs/tab_strip_model.h"
11 #include "chrome/test/base/in_process_browser_test.h" 11 #include "chrome/test/base/in_process_browser_test.h"
12 #include "chrome/test/base/ui_test_utils.h" 12 #include "chrome/test/base/ui_test_utils.h"
13 #include "content/public/browser/render_frame_host.h" 13 #include "content/public/browser/render_frame_host.h"
14 #include "content/public/browser/render_process_host.h" 14 #include "content/public/browser/render_process_host.h"
15 #include "content/public/browser/render_widget_host_view.h" 15 #include "content/public/browser/render_widget_host_view.h"
16 #include "content/public/browser/web_contents.h" 16 #include "content/public/browser/web_contents.h"
17 #include "content/public/test/browser_test_utils.h" 17 #include "content/public/test/browser_test_utils.h"
18 #include "content/public/test/content_browser_test_utils.h" 18 #include "content/public/test/content_browser_test_utils.h"
19 #include "content/public/test/test_utils.h" 19 #include "content/public/test/test_utils.h"
20 #include "content/public/test/text_input_test_utils.h" 20 #include "content/public/test/text_input_test_utils.h"
21 #include "net/dns/mock_host_resolver.h" 21 #include "net/dns/mock_host_resolver.h"
22 #include "net/test/embedded_test_server/embedded_test_server.h" 22 #include "net/test/embedded_test_server/embedded_test_server.h"
23 #include "ui/base/ime/composition_underline.h" 23 #include "ui/base/ime/composition_underline.h"
24 #include "ui/base/ime/text_input_client.h" 24 #include "ui/base/ime/text_input_client.h"
25 #include "ui/base/ime/text_input_mode.h" 25 #include "ui/base/ime/text_input_mode.h"
26 #include "ui/base/ime/text_input_type.h" 26 #include "ui/base/ime/text_input_type.h"
27 #include "url/gurl.h" 27 #include "url/gurl.h"
28 28
29 // TODO(ekaramad): The following tests are only active on aura platforms. After 29 // TODO(ekaramad): The following tests should be active on all platforms. After
30 // fixing crbug.com/578168 for all platforms, the following tests should be 30 // fixing https://crbug.com/578168, this test file should be built for android
31 // activated for other platforms, e.g., Mac and Android (crbug.com/602723). 31 // as well and most of the following tests should be enabled for all platforms
32 //(https://crbug.com/602723).
32 33
33 /////////////////////////////////////////////////////////////////////////////// 34 ///////////////////////////////////////////////////////////////////////////////
34 // TextInputManager and IME Tests 35 // TextInputManager and IME Tests
35 // 36 //
36 // The following tests verify the correctness of TextInputState tracking on the 37 // The following tests verify the correctness of TextInputState tracking on the
37 // browser side. They also make sure the IME logic works correctly. The baseline 38 // browser side. They also make sure the IME logic works correctly. The baseline
38 // for comparison is the default functionality in the non-OOPIF case (i.e., the 39 // for comparison is the default functionality in the non-OOPIF case (i.e., the
39 // legacy implementation in RWHV's other than RWHVCF). 40 // legacy implementation in RWHV's other than RWHVCF).
40 // These tests live outside content/ because they rely on being part of the 41 // These tests live outside content/ because they rely on being part of the
41 // interactive UI test framework (to avoid flakiness). 42 // interactive UI test framework (to avoid flakiness).
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
512 EXPECT_TRUE(ExecuteScript( 513 EXPECT_TRUE(ExecuteScript(
513 main_frame, "document.querySelector('iframe').src = 'about:blank'")); 514 main_frame, "document.querySelector('iframe').src = 'about:blank'"));
514 child_reset_state_observer.Wait(); 515 child_reset_state_observer.Wait();
515 } 516 }
516 517
517 // This test creates a blank page and adds an <input> to it. Then, the <input> 518 // This test creates a blank page and adds an <input> to it. Then, the <input>
518 // is focused and the test verfies that the |TextInputState.type| is set to 519 // is focused and the test verfies that the |TextInputState.type| is set to
519 // ui::TEXT_INPUT_TYPE_TEXT. Next, the browser is navigated away and the test 520 // ui::TEXT_INPUT_TYPE_TEXT. Next, the browser is navigated away and the test
520 // verifies that |TextInputState.type| resets to ui::TEXT_INPUT_TYPE_NONE. 521 // verifies that |TextInputState.type| resets to ui::TEXT_INPUT_TYPE_NONE.
521 IN_PROC_BROWSER_TEST_F(SitePerProcessTextInputManagerTest, 522 IN_PROC_BROWSER_TEST_F(SitePerProcessTextInputManagerTest,
522 ResetStateAfterBrowserNavigation) { 523 ResetStateAfterBrowserNavigation) {
Charlie Reis 2016/07/27 16:14:18 Ok, glad to see the tests here and above are runni
EhsanK 2016/07/27 16:46:32 Yes, and these should also run on Android when we
523 CreateIframePage("a()"); 524 CreateIframePage("a()");
524 content::RenderFrameHost* main_frame = GetFrame(IndexVector{}); 525 content::RenderFrameHost* main_frame = GetFrame(IndexVector{});
525 AddInputFieldToFrame(main_frame, "text", "", false); 526 AddInputFieldToFrame(main_frame, "text", "", false);
526 527
527 TextInputManagerTypeObserver set_state_observer(active_contents(), 528 TextInputManagerTypeObserver set_state_observer(active_contents(),
528 ui::TEXT_INPUT_TYPE_TEXT); 529 ui::TEXT_INPUT_TYPE_TEXT);
529 SimulateKeyPress(active_contents(), ui::DomKey::TAB, ui::DomCode::TAB, 530 SimulateKeyPress(active_contents(), ui::DomKey::TAB, ui::DomCode::TAB,
530 ui::VKEY_TAB, false, false, false, false); 531 ui::VKEY_TAB, false, false, false, false);
531 set_state_observer.Wait(); 532 set_state_observer.Wait();
532 533
533 TextInputManagerTypeObserver reset_state_observer(active_contents(), 534 TextInputManagerTypeObserver reset_state_observer(active_contents(),
534 ui::TEXT_INPUT_TYPE_NONE); 535 ui::TEXT_INPUT_TYPE_NONE);
535 ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); 536 ui_test_utils::NavigateToURL(browser(), GURL("about:blank"));
536 reset_state_observer.Wait(); 537 reset_state_observer.Wait();
537 } 538 }
538 539
540 // TODO(ekaramad): Enable the following tests on other platforms when the
541 // corresponding feature is implemented (http://crbug.com/578168).
542 #if defined(USE_AURA)
EhsanK 2016/07/27 16:46:32 I guess all of the following will eventually be ac
539 // This test creates a page with multiple child frames and adds an <input> to 543 // This test creates a page with multiple child frames and adds an <input> to
540 // each frame. Then, sequentially, each <input> is focused by sending a tab key. 544 // each frame. Then, sequentially, each <input> is focused by sending a tab key.
541 // Then, after |TextInputState.type| for a view is changed to text, another key 545 // Then, after |TextInputState.type| for a view is changed to text, another key
542 // is pressed (a character) and then the test verifies that TextInputManager 546 // is pressed (a character) and then the test verifies that TextInputManager
543 // receives the corresponding update on the change in selection bounds on the 547 // receives the corresponding update on the change in selection bounds on the
544 // browser side. 548 // browser side.
545 IN_PROC_BROWSER_TEST_F(SitePerProcessTextInputManagerTest, 549 IN_PROC_BROWSER_TEST_F(SitePerProcessTextInputManagerTest,
546 TrackSelectionBoundsForAllFrames) { 550 TrackSelectionBoundsForAllFrames) {
547 CreateIframePage("a(b,c(a,b),d)"); 551 CreateIframePage("a(b,c(a,b),d)");
548 std::vector<content::RenderFrameHost*> frames{ 552 std::vector<content::RenderFrameHost*> frames{
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
639 ViewTextSelectionObserver text_selection_observer( 643 ViewTextSelectionObserver text_selection_observer(
640 web_contents, frame->GetView(), expected_length); 644 web_contents, frame->GetView(), expected_length);
641 SimulateKeyPress(web_contents, ui::DomKey::TAB, ui::DomCode::TAB, 645 SimulateKeyPress(web_contents, ui::DomKey::TAB, ui::DomCode::TAB,
642 ui::VKEY_TAB, false, false, false, false); 646 ui::VKEY_TAB, false, false, false, false);
643 text_selection_observer.Wait(); 647 text_selection_observer.Wait();
644 }; 648 };
645 649
646 for (size_t i = 0; i < frames.size(); ++i) 650 for (size_t i = 0; i < frames.size(); ++i)
647 send_tab_and_wait_for_selection_change(frames[i], input_text[i].size()); 651 send_tab_and_wait_for_selection_change(frames[i], input_text[i].size());
648 } 652 }
653 #endif // USE_AURA
649 654
650 // TODO(ekaramad): The following tests are specifically written for Aura and are 655 // TODO(ekaramad): The following tests are specifically written for Aura and are
651 // based on InputMethodObserver. Write similar tests for Mac/Android/Mus 656 // based on InputMethodObserver. Write similar tests for Mac/Android/Mus
652 // (crbug.com/602723). 657 // (crbug.com/602723).
Charlie Reis 2016/07/27 16:14:18 This part confuses me a bit. Is there a meaningfu
EhsanK 2016/07/27 16:46:32 Sorry for the confusion. The block above is Aura o
653 658
659 #if defined(USE_AURA)
654 // Observes current input method for state changes. 660 // Observes current input method for state changes.
655 class InputMethodObserverBase { 661 class InputMethodObserverBase {
656 public: 662 public:
657 explicit InputMethodObserverBase(content::WebContents* web_contents) 663 explicit InputMethodObserverBase(content::WebContents* web_contents)
658 : success_(false), 664 : success_(false),
659 test_observer_(content::TestInputMethodObserver::Create(web_contents)) { 665 test_observer_(content::TestInputMethodObserver::Create(web_contents)) {
660 } 666 }
661 667
662 void Wait() { 668 void Wait() {
663 if (success_) 669 if (success_)
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 private: 708 private:
703 DISALLOW_COPY_AND_ASSIGN(InputMethodObserverForShowIme); 709 DISALLOW_COPY_AND_ASSIGN(InputMethodObserverForShowIme);
704 }; 710 };
705 711
706 // This test verifies that the IME for Aura is shown if and only if the current 712 // This test verifies that the IME for Aura is shown if and only if the current
707 // client's |TextInputState.type| is not ui::TEXT_INPUT_TYPE_NONE and the flag 713 // client's |TextInputState.type| is not ui::TEXT_INPUT_TYPE_NONE and the flag
708 // |TextInputState.show_ime_if_needed| is true. This should happen even when 714 // |TextInputState.show_ime_if_needed| is true. This should happen even when
709 // the TextInputState has not changed (according to the platform), e.g., in 715 // the TextInputState has not changed (according to the platform), e.g., in
710 // aura when receiving two consecutive updates with same |TextInputState.type|. 716 // aura when receiving two consecutive updates with same |TextInputState.type|.
711 // TODO(ekaramad): This test is actually a unit test not necessarily an OOPIF 717 // TODO(ekaramad): This test is actually a unit test not necessarily an OOPIF
712 // test. We should move it to somewhere more relevant. 718 // test. We should move it to somewhere more relevant.
EhsanK 2016/07/27 16:46:31 I might remove this test and put it with other uni
713 IN_PROC_BROWSER_TEST_F(SitePerProcessTextInputManagerTest, 719 IN_PROC_BROWSER_TEST_F(SitePerProcessTextInputManagerTest,
714 CorrectlyShowImeIfNeeded) { 720 CorrectlyShowImeIfNeeded) {
715 // We only need the <iframe> page to create RWHV. 721 // We only need the <iframe> page to create RWHV.
716 CreateIframePage("a()"); 722 CreateIframePage("a()");
717 content::RenderFrameHost* main_frame = GetFrame(IndexVector{}); 723 content::RenderFrameHost* main_frame = GetFrame(IndexVector{});
718 content::RenderWidgetHostView* view = main_frame->GetView(); 724 content::RenderWidgetHostView* view = main_frame->GetView();
719 content::WebContents* web_contents = active_contents(); 725 content::WebContents* web_contents = active_contents();
720 726
721 content::TextInputStateSender sender(view); 727 content::TextInputStateSender sender(view);
722 728
(...skipping 26 matching lines...) Expand all
749 EXPECT_FALSE(send_and_check_show_ime()); 755 EXPECT_FALSE(send_and_check_show_ime());
750 756
751 // Set |TextInputState.show_ime_if_needed|. Expect IME. 757 // Set |TextInputState.show_ime_if_needed|. Expect IME.
752 sender.SetShowImeIfNeeded(true); 758 sender.SetShowImeIfNeeded(true);
753 EXPECT_TRUE(send_and_check_show_ime()); 759 EXPECT_TRUE(send_and_check_show_ime());
754 760
755 // Set |TextInputState.type| to ui::TEXT_INPUT_TYPE_NONE. Expect no IME. 761 // Set |TextInputState.type| to ui::TEXT_INPUT_TYPE_NONE. Expect no IME.
756 sender.SetType(ui::TEXT_INPUT_TYPE_NONE); 762 sender.SetType(ui::TEXT_INPUT_TYPE_NONE);
757 EXPECT_FALSE(send_and_check_show_ime()); 763 EXPECT_FALSE(send_and_check_show_ime());
758 } 764 }
765 #endif
OLDNEW
« no previous file with comments | « no previous file | chrome/test/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698