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

Side by Side Diff: content/public/test/render_view_test.cc

Issue 1026493002: Allow only a user gesture to trigger autofill popup (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rename var. Created 5 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/public/test/render_view_test.h" 5 #include "content/public/test/render_view_test.h"
6 6
7 #include <cctype>
8
7 #include "base/run_loop.h" 9 #include "base/run_loop.h"
8 #include "content/common/dom_storage/dom_storage_types.h" 10 #include "content/common/dom_storage/dom_storage_types.h"
9 #include "content/common/frame_messages.h" 11 #include "content/common/frame_messages.h"
10 #include "content/common/input_messages.h" 12 #include "content/common/input_messages.h"
11 #include "content/common/view_messages.h" 13 #include "content/common/view_messages.h"
12 #include "content/public/browser/content_browser_client.h" 14 #include "content/public/browser/content_browser_client.h"
13 #include "content/public/browser/native_web_keyboard_event.h" 15 #include "content/public/browser/native_web_keyboard_event.h"
14 #include "content/public/common/content_client.h" 16 #include "content/public/common/content_client.h"
15 #include "content/public/common/renderer_preferences.h" 17 #include "content/public/common/renderer_preferences.h"
16 #include "content/public/renderer/content_renderer_client.h" 18 #include "content/public/renderer/content_renderer_client.h"
17 #include "content/public/test/frame_load_waiter.h" 19 #include "content/public/test/frame_load_waiter.h"
18 #include "content/renderer/history_controller.h" 20 #include "content/renderer/history_controller.h"
19 #include "content/renderer/history_serialization.h" 21 #include "content/renderer/history_serialization.h"
20 #include "content/renderer/render_thread_impl.h" 22 #include "content/renderer/render_thread_impl.h"
21 #include "content/renderer/render_view_impl.h" 23 #include "content/renderer/render_view_impl.h"
22 #include "content/renderer/renderer_blink_platform_impl.h" 24 #include "content/renderer/renderer_blink_platform_impl.h"
23 #include "content/renderer/renderer_main_platform_delegate.h" 25 #include "content/renderer/renderer_main_platform_delegate.h"
24 #include "content/renderer/scheduler/renderer_scheduler.h" 26 #include "content/renderer/scheduler/renderer_scheduler.h"
25 #include "content/test/fake_compositor_dependencies.h" 27 #include "content/test/fake_compositor_dependencies.h"
26 #include "content/test/mock_render_process.h" 28 #include "content/test/mock_render_process.h"
27 #include "content/test/test_content_client.h" 29 #include "content/test/test_content_client.h"
28 #include "third_party/WebKit/public/platform/WebScreenInfo.h" 30 #include "third_party/WebKit/public/platform/WebScreenInfo.h"
29 #include "third_party/WebKit/public/platform/WebURLRequest.h" 31 #include "third_party/WebKit/public/platform/WebURLRequest.h"
32 #include "third_party/WebKit/public/web/WebDocument.h"
30 #include "third_party/WebKit/public/web/WebHistoryItem.h" 33 #include "third_party/WebKit/public/web/WebHistoryItem.h"
34 #include "third_party/WebKit/public/web/WebInputElement.h"
31 #include "third_party/WebKit/public/web/WebInputEvent.h" 35 #include "third_party/WebKit/public/web/WebInputEvent.h"
32 #include "third_party/WebKit/public/web/WebKit.h" 36 #include "third_party/WebKit/public/web/WebKit.h"
33 #include "third_party/WebKit/public/web/WebLocalFrame.h" 37 #include "third_party/WebKit/public/web/WebLocalFrame.h"
34 #include "third_party/WebKit/public/web/WebScriptSource.h" 38 #include "third_party/WebKit/public/web/WebScriptSource.h"
35 #include "third_party/WebKit/public/web/WebView.h" 39 #include "third_party/WebKit/public/web/WebView.h"
36 #include "ui/base/resource/resource_bundle.h" 40 #include "ui/base/resource/resource_bundle.h"
41 #include "ui/events/keycodes/keyboard_codes.h"
37 #include "v8/include/v8.h" 42 #include "v8/include/v8.h"
38 43
39 #if defined(OS_MACOSX) 44 #if defined(OS_MACOSX)
40 #include "base/mac/scoped_nsautorelease_pool.h" 45 #include "base/mac/scoped_nsautorelease_pool.h"
41 #endif 46 #endif
42 47
43 using blink::WebGestureEvent; 48 using blink::WebGestureEvent;
44 using blink::WebInputEvent; 49 using blink::WebInputEvent;
45 using blink::WebLocalFrame; 50 using blink::WebLocalFrame;
46 using blink::WebMouseEvent; 51 using blink::WebMouseEvent;
47 using blink::WebScriptSource; 52 using blink::WebScriptSource;
48 using blink::WebString; 53 using blink::WebString;
49 using blink::WebURLRequest; 54 using blink::WebURLRequest;
50 55
51 namespace { 56 namespace {
57
52 const int32 kOpenerId = -2; 58 const int32 kOpenerId = -2;
53 const int32 kRouteId = 5; 59 const int32 kRouteId = 5;
54 const int32 kMainFrameRouteId = 6; 60 const int32 kMainFrameRouteId = 6;
55 const int32 kNewWindowRouteId = 7; 61 const int32 kNewWindowRouteId = 7;
56 const int32 kNewFrameRouteId = 10; 62 const int32 kNewFrameRouteId = 10;
57 const int32 kSurfaceId = 42; 63 const int32 kSurfaceId = 42;
58 64
65 // Converts |ascii_character| into |key_code| and returns true on success.
66 // Handles only the characters needed by tests.
67 bool GetWindowsKeyCode(char ascii_character, int* key_code) {
68 if (isalnum(ascii_character)) {
69 *key_code = base::ToUpperASCII(ascii_character);
70 return true;
71 }
72
73 switch (ascii_character) {
74 case '@':
75 *key_code = '2';
76 return true;
77 case '_':
78 *key_code = ui::VKEY_OEM_MINUS;
79 return true;
80 case '.':
81 *key_code = ui::VKEY_OEM_PERIOD;
82 return true;
83 case ui::VKEY_BACK:
84 *key_code = ui::VKEY_BACK;
85 return true;
86 default:
87 return false;
88 }
89 }
90
59 } // namespace 91 } // namespace
60 92
61 namespace content { 93 namespace content {
62 94
63 class RendererBlinkPlatformImplNoSandboxImpl 95 class RendererBlinkPlatformImplNoSandboxImpl
64 : public RendererBlinkPlatformImpl { 96 : public RendererBlinkPlatformImpl {
65 public: 97 public:
66 RendererBlinkPlatformImplNoSandboxImpl(RendererScheduler* scheduler) 98 RendererBlinkPlatformImplNoSandboxImpl(RendererScheduler* scheduler)
67 : RendererBlinkPlatformImpl(scheduler) {} 99 : RendererBlinkPlatformImpl(scheduler) {}
68 100
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 params.physical_backing_size = new_size; 419 params.physical_backing_size = new_size;
388 params.top_controls_height = 0.f; 420 params.top_controls_height = 0.f;
389 params.top_controls_shrink_blink_size = false; 421 params.top_controls_shrink_blink_size = false;
390 params.resizer_rect = resizer_rect; 422 params.resizer_rect = resizer_rect;
391 params.is_fullscreen_granted = is_fullscreen_granted; 423 params.is_fullscreen_granted = is_fullscreen_granted;
392 params.display_mode = blink::WebDisplayModeBrowser; 424 params.display_mode = blink::WebDisplayModeBrowser;
393 scoped_ptr<IPC::Message> resize_message(new ViewMsg_Resize(0, params)); 425 scoped_ptr<IPC::Message> resize_message(new ViewMsg_Resize(0, params));
394 OnMessageReceived(*resize_message); 426 OnMessageReceived(*resize_message);
395 } 427 }
396 428
429 void RenderViewTest::SimulateUserTypingASCIICharacter(char ascii_character) {
430 blink::WebKeyboardEvent event;
431 event.text[0] = ascii_character;
432 ASSERT_TRUE(GetWindowsKeyCode(ascii_character, &event.windowsKeyCode));
433 if (isupper(ascii_character) || ascii_character == '@' ||
434 ascii_character == '_') {
435 event.modifiers = blink::WebKeyboardEvent::ShiftKey;
436 }
437
438 event.type = blink::WebKeyboardEvent::RawKeyDown;
439 SendWebKeyboardEvent(event);
440
441 event.type = blink::WebKeyboardEvent::Char;
442 SendWebKeyboardEvent(event);
443
444 event.type = blink::WebKeyboardEvent::KeyUp;
445 SendWebKeyboardEvent(event);
446 }
447
448 void RenderViewTest::ProcessInputForAutofill() {
Jay Civelli 2015/04/23 21:57:43 I am confused on whether this actually does someth
please use gerrit instead 2015/04/27 21:20:34 Running the message loop will trigger autofill. W
Jay Civelli 2015/04/27 22:17:19 OK, why do we need to re-layout though? Wouldn't t
please use gerrit instead 2015/04/27 23:49:54 It seems we don't need re-layout. The original com
449 // Processing is delayed because of a Blink bug:
450 // https://bugs.webkit.org/show_bug.cgi?id=16976 See
451 // PasswordAutofillAgent::TextDidChangeInTextField() for details.
452
453 // Autocomplete will trigger a style recalculation when we put up the next
454 // frame, but we don't want to wait that long. Instead, trigger a style
455 // recalcuation manually after TextFieldDidChangeImpl runs.
456 base::MessageLoop::current()->PostTask(
457 FROM_HERE,
458 base::Bind(&RenderViewTest::LayoutMainFrame, base::Unretained(this)));
459
460 base::MessageLoop::current()->RunUntilIdle();
461 }
462
463 void RenderViewTest::SimulateUserInputChangeForElement(
464 blink::WebInputElement* input,
465 const std::string& new_value) {
466 while (!input->focused())
467 input->document().frame()->view()->advanceFocus(false);
Jay Civelli 2015/04/23 21:57:43 Wouldn't simulating a click on the input element a
please use gerrit instead 2015/04/27 21:20:34 I tried that and for some reason focus does not ch
Jay Civelli 2015/04/27 22:17:19 Sounds good.
468
469 size_t previous_length = input->value().length();
470 for (size_t i = 0; i < previous_length; ++i)
471 SimulateUserTypingASCIICharacter(ui::VKEY_BACK);
472
473 EXPECT_TRUE(input->value().utf8().empty());
474 ASSERT_TRUE(base::IsStringASCII(new_value));
Jay Civelli 2015/04/23 21:57:43 Nit: this assert should probably be moved to the t
please use gerrit instead 2015/04/27 21:20:34 Done.
475 for (size_t i = 0; i < new_value.size(); ++i)
476 SimulateUserTypingASCIICharacter(new_value[i]);
477
478 // Compare only beginning, because autocomplete may have filled out the
479 // form.
480 EXPECT_EQ(new_value, input->value().utf8().substr(0, new_value.length()));
481
482 ProcessInputForAutofill();
483 }
484
397 bool RenderViewTest::OnMessageReceived(const IPC::Message& msg) { 485 bool RenderViewTest::OnMessageReceived(const IPC::Message& msg) {
398 RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_); 486 RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_);
399 return impl->OnMessageReceived(msg); 487 return impl->OnMessageReceived(msg);
400 } 488 }
401 489
402 void RenderViewTest::DidNavigateWithinPage(blink::WebLocalFrame* frame, 490 void RenderViewTest::DidNavigateWithinPage(blink::WebLocalFrame* frame,
403 bool is_new_navigation) { 491 bool is_new_navigation) {
404 RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_); 492 RenderViewImpl* impl = static_cast<RenderViewImpl*>(view_);
405 blink::WebHistoryItem item; 493 blink::WebHistoryItem item;
406 item.initialize(); 494 item.initialize();
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 request_params.current_history_list_length = history_list_length; 545 request_params.current_history_list_length = history_list_length;
458 546
459 impl->GetMainRenderFrame()->OnNavigate(common_params, StartNavigationParams(), 547 impl->GetMainRenderFrame()->OnNavigate(common_params, StartNavigationParams(),
460 request_params); 548 request_params);
461 549
462 // The load actually happens asynchronously, so we pump messages to process 550 // The load actually happens asynchronously, so we pump messages to process
463 // the pending continuation. 551 // the pending continuation.
464 FrameLoadWaiter(view_->GetMainRenderFrame()).Wait(); 552 FrameLoadWaiter(view_->GetMainRenderFrame()).Wait();
465 } 553 }
466 554
555 void RenderViewTest::LayoutMainFrame() {
556 GetMainFrame()->view()->layout();
557 }
558
467 } // namespace content 559 } // namespace content
OLDNEW
« content/public/test/render_view_test.h ('K') | « content/public/test/render_view_test.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698