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

Side by Side Diff: chrome/browser/apps/guest_view/web_view_browsertest.cc

Issue 1652483002: Browser Side Text Input State Tracking for OOPIF. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added Missing Files and Fixed Some Errors Created 4 years, 8 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <queue> 5 #include <queue>
6 #include <utility> 6 #include <utility>
7 7
8 #include "base/location.h" 8 #include "base/location.h"
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 content::WebContentsDelegate* orig_delegate_; 348 content::WebContentsDelegate* orig_delegate_;
349 bool waiting_for_decision_; 349 bool waiting_for_decision_;
350 bool expect_allow_; 350 bool expect_allow_;
351 bool decision_made_; 351 bool decision_made_;
352 bool last_download_allowed_; 352 bool last_download_allowed_;
353 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; 353 scoped_refptr<content::MessageLoopRunner> message_loop_runner_;
354 354
355 DISALLOW_COPY_AND_ASSIGN(MockDownloadWebContentsDelegate); 355 DISALLOW_COPY_AND_ASSIGN(MockDownloadWebContentsDelegate);
356 }; 356 };
357 357
358 class TextInputStateHelper {
359 public:
360 using Predicate =
361 base::Callback<bool(const content::TextInputStateTestExport&)>;
362
363 static void WaitForDesiredState(content::WebContents* web_contents,
364 const Predicate& predicate) {
365 content::TextInputStateTestExport state =
366 content::TextInputStateTestExport::FromWebContents(web_contents);
367 while (!predicate.Run(state)) {
368 scoped_refptr<content::MessageLoopRunner> loop =
369 new content::MessageLoopRunner();
370 content::BrowserThread::PostDelayedTask(
371 content::BrowserThread::UI, FROM_HERE, loop->QuitClosure(),
372 base::TimeDelta::FromMilliseconds(1LL));
373 loop->Run();
374 state = content::TextInputStateTestExport::FromWebContents(web_contents);
375 }
376 }
377
378 static bool IsStateOfGivenType(
379 ui::TextInputType type,
380 const content::TextInputStateTestExport& state) {
381 return type == state.type();
382 }
383
384 static bool HasGivenValue(const std::string& value,
385 const content::TextInputStateTestExport& state) {
386 return value == state.value();
387 }
388 };
389
358 // TODO(wjmaclean): Fix this test class at some point so it can be re-enabled on 390 // TODO(wjmaclean): Fix this test class at some point so it can be re-enabled on
359 // the site isolation bots, and then look at re-enabling WebViewFocusTest when 391 // the site isolation bots, and then look at re-enabling WebViewFocusTest when
360 // that happens. 392 // that happens.
361 // https://crbug.com/503751 393 // https://crbug.com/503751
362 class WebViewTestBase : public extensions::PlatformAppBrowserTest { 394 class WebViewTestBase : public extensions::PlatformAppBrowserTest {
363 protected: 395 protected:
364 void SetUp() override { 396 void SetUp() override {
365 if (UsesFakeSpeech()) { 397 if (UsesFakeSpeech()) {
366 // SpeechRecognition test specific SetUp. 398 // SpeechRecognition test specific SetUp.
367 fake_speech_recognition_manager_.reset( 399 fake_speech_recognition_manager_.reset(
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
776 void SetUpCommandLine(base::CommandLine* command_line) override { 808 void SetUpCommandLine(base::CommandLine* command_line) override {
777 WebViewTest::SetUpCommandLine(command_line); 809 WebViewTest::SetUpCommandLine(command_line);
778 command_line->AppendSwitchASCII(switches::kForceDeviceScaleFactor, 810 command_line->AppendSwitchASCII(switches::kForceDeviceScaleFactor,
779 base::StringPrintf("%f", scale())); 811 base::StringPrintf("%f", scale()));
780 command_line->AppendSwitch(switches::kEnableUseZoomForDSF); 812 command_line->AppendSwitch(switches::kEnableUseZoomForDSF);
781 } 813 }
782 814
783 static float scale() { return 2.0f; } 815 static float scale() { return 2.0f; }
784 }; 816 };
785 817
818 // TODO(ekaramad): Enable this test for OOPIF.
819 class WebViewTextInputStateTest : public WebViewTest {};
820 INSTANTIATE_TEST_CASE_P(WebViewTests,
821 WebViewTextInputStateTest,
822 testing::Bool());
823
786 class WebContentsAudioMutedObserver : public content::WebContentsObserver { 824 class WebContentsAudioMutedObserver : public content::WebContentsObserver {
787 public: 825 public:
788 explicit WebContentsAudioMutedObserver(content::WebContents* web_contents) 826 explicit WebContentsAudioMutedObserver(content::WebContents* web_contents)
789 : WebContentsObserver(web_contents), 827 : WebContentsObserver(web_contents),
790 loop_runner_(new content::MessageLoopRunner), 828 loop_runner_(new content::MessageLoopRunner),
791 muting_update_observed_(false) {} 829 muting_update_observed_(false) {}
792 830
793 // WebContentsObserver. 831 // WebContentsObserver.
794 void DidUpdateAudioMutingState(bool muted) override { 832 void DidUpdateAudioMutingState(bool muted) override {
795 muting_update_observed_ = true; 833 muting_update_observed_ = true;
(...skipping 2310 matching lines...) Expand 10 before | Expand all | Expand 10 after
3106 // 4 tasks expected. The order is arbitrary. 3144 // 4 tasks expected. The order is arbitrary.
3107 // Tab: about:blank, 3145 // Tab: about:blank,
3108 // Background Page: <webview> task manager test, 3146 // Background Page: <webview> task manager test,
3109 // App: <webview> task manager test, 3147 // App: <webview> task manager test,
3110 // Webview: WebViewed test content. 3148 // Webview: WebViewed test content.
3111 EXPECT_EQ(4U, task_manager.tasks().size()); 3149 EXPECT_EQ(4U, task_manager.tasks().size());
3112 EXPECT_TRUE(HasExpectedGuestTask(task_manager, guest_contents)); 3150 EXPECT_TRUE(HasExpectedGuestTask(task_manager, guest_contents));
3113 } 3151 }
3114 3152
3115 #endif // defined(ENABLE_TASK_MANAGER) 3153 #endif // defined(ENABLE_TASK_MANAGER)
3154
3155 // TODO(ekaramad): Activate this test for OOPIF when input event routing for
3156 // OOPIF-<webview> is fixed.
3157 IN_PROC_BROWSER_TEST_P(WebViewTextInputStateTest,
3158 TopLevelWebContentsTracksCorrectly) {
3159 if (content::BrowserPluginGuestMode::UseCrossProcessFramesForGuests())
3160 return;
3161
3162 ASSERT_TRUE(StartEmbeddedTestServer());
3163
3164 EXPECT_TRUE(!!LoadGuest(
3165 "/extensions/platform_apps/web_view/text_input_state/guest.html",
3166 "web_view/text_input_state"));
3167
3168 auto press_tab = [](content::WebContents* web_contents) {
3169 content::SimulateKeyPress(web_contents, ui::VKEY_TAB, false, false, false,
3170 false);
3171 };
3172
3173 auto get_type_checker = [](ui::TextInputType target) {
3174 return base::Bind(&TextInputStateHelper::IsStateOfGivenType, target);
3175 };
3176
3177 content::WebContents* embedder_webcontents = GetEmbedderWebContents();
3178
3179 // Press the tab key. The <input> in the embedder should get focused.
3180 // Top level state type should be number.
3181 press_tab(embedder_webcontents);
3182 TextInputStateHelper::WaitForDesiredState(
3183 GetEmbedderWebContents(), get_type_checker(ui::TEXT_INPUT_TYPE_NUMBER));
3184
3185 // Press the tab key again and the <input> inside <webview> gets focused. The
3186 // input type should text now.
3187 press_tab(embedder_webcontents);
3188 TextInputStateHelper::WaitForDesiredState(
3189 GetEmbedderWebContents(), get_type_checker(ui::TEXT_INPUT_TYPE_TEXT));
3190
3191 // Press the tab key one more time to get back to embedder's second <input>.
3192 // The value should be "last one".
3193 press_tab(embedder_webcontents);
3194 TextInputStateHelper::WaitForDesiredState(
3195 GetEmbedderWebContents(),
3196 base::Bind(&TextInputStateHelper::HasGivenValue, "last one"));
3197 }
3198
3199 // TODO(ekaramad): Activate this test for OOPIF when input event routing for
3200 // OOPIF-<webview> is fixed.
3201 IN_PROC_BROWSER_TEST_P(WebViewTextInputStateTest, CrashingWebViewResetsState) {
3202 if (content::BrowserPluginGuestMode::UseCrossProcessFramesForGuests())
3203 return;
3204
3205 ASSERT_TRUE(StartEmbeddedTestServer());
3206
3207 content::WebContents* guest_contents = LoadGuest(
3208 "/extensions/platform_apps/web_view/text_input_state/guest.html",
3209 "web_view/text_input_state");
3210
3211 // Press tab key twice to end up in the <input> of the <webview>,
3212 for (size_t i = 0; i < 2; ++i) {
3213 content::SimulateKeyPress(GetEmbedderWebContents(), ui::VKEY_TAB, false,
3214 false, false, false);
3215 };
3216
3217 TextInputStateHelper::WaitForDesiredState(
3218 GetEmbedderWebContents(),
3219 base::Bind(&TextInputStateHelper::HasGivenValue, "guest"));
3220
3221 // Now crash the <webview>.
3222 guest_contents->GetRenderProcessHost()->Shutdown(false, 0);
3223
3224 // State should reset to none.
3225 TextInputStateHelper::WaitForDesiredState(
3226 GetEmbedderWebContents(),
3227 base::Bind(&TextInputStateHelper::IsStateOfGivenType,
3228 ui::TEXT_INPUT_TYPE_NONE));
3229 }
OLDNEW
« no previous file with comments | « no previous file | chrome/test/data/extensions/platform_apps/web_view/text_input_state/background.js » ('j') | content/DEPS » ('J')

Powered by Google App Engine
This is Rietveld 408576698