OLD | NEW |
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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 | 6 |
7 #include "base/shared_memory.h" | 7 #include "base/shared_memory.h" |
8 #include "base/string_util.h" | 8 #include "base/string_util.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 #include "content/common/intents_messages.h" | 10 #include "content/common/intents_messages.h" |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
48 #include "ui/base/keycodes/keyboard_code_conversion.h" | 48 #include "ui/base/keycodes/keyboard_code_conversion.h" |
49 #include "ui/base/x/x11_util.h" | 49 #include "ui/base/x/x11_util.h" |
50 #endif | 50 #endif |
51 | 51 |
52 using WebKit::WebFrame; | 52 using WebKit::WebFrame; |
53 using WebKit::WebInputEvent; | 53 using WebKit::WebInputEvent; |
54 using WebKit::WebMouseEvent; | 54 using WebKit::WebMouseEvent; |
55 using WebKit::WebString; | 55 using WebKit::WebString; |
56 using WebKit::WebTextDirection; | 56 using WebKit::WebTextDirection; |
57 using WebKit::WebURLError; | 57 using WebKit::WebURLError; |
58 using content::NativeWebKeyboardEvent; | 58 |
| 59 namespace content { |
59 | 60 |
60 namespace { | 61 namespace { |
61 #if defined(USE_AURA) && defined(USE_X11) | 62 #if defined(USE_AURA) && defined(USE_X11) |
62 // Converts MockKeyboard::Modifiers to ui::EventFlags. | 63 // Converts MockKeyboard::Modifiers to ui::EventFlags. |
63 int ConvertMockKeyboardModifier(MockKeyboard::Modifiers modifiers) { | 64 int ConvertMockKeyboardModifier(MockKeyboard::Modifiers modifiers) { |
64 static struct ModifierMap { | 65 static struct ModifierMap { |
65 MockKeyboard::Modifiers src; | 66 MockKeyboard::Modifiers src; |
66 int dst; | 67 int dst; |
67 } kModifierMap[] = { | 68 } kModifierMap[] = { |
68 { MockKeyboard::LEFT_SHIFT, ui::EF_SHIFT_DOWN }, | 69 { MockKeyboard::LEFT_SHIFT, ui::EF_SHIFT_DOWN }, |
69 { MockKeyboard::RIGHT_SHIFT, ui::EF_SHIFT_DOWN }, | 70 { MockKeyboard::RIGHT_SHIFT, ui::EF_SHIFT_DOWN }, |
70 { MockKeyboard::LEFT_CONTROL, ui::EF_CONTROL_DOWN }, | 71 { MockKeyboard::LEFT_CONTROL, ui::EF_CONTROL_DOWN }, |
71 { MockKeyboard::RIGHT_CONTROL, ui::EF_CONTROL_DOWN }, | 72 { MockKeyboard::RIGHT_CONTROL, ui::EF_CONTROL_DOWN }, |
72 { MockKeyboard::LEFT_ALT, ui::EF_ALT_DOWN }, | 73 { MockKeyboard::LEFT_ALT, ui::EF_ALT_DOWN }, |
73 { MockKeyboard::RIGHT_ALT, ui::EF_ALT_DOWN }, | 74 { MockKeyboard::RIGHT_ALT, ui::EF_ALT_DOWN }, |
74 }; | 75 }; |
75 int flags = 0; | 76 int flags = 0; |
76 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kModifierMap); ++i) { | 77 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kModifierMap); ++i) { |
77 if (kModifierMap[i].src & modifiers) { | 78 if (kModifierMap[i].src & modifiers) { |
78 flags |= kModifierMap[i].dst; | 79 flags |= kModifierMap[i].dst; |
79 } | 80 } |
80 } | 81 } |
81 return flags; | 82 return flags; |
82 } | 83 } |
83 #endif | 84 #endif |
84 | 85 |
85 class WebUITestWebUIControllerFactory : public content::WebUIControllerFactory { | 86 class WebUITestWebUIControllerFactory : public WebUIControllerFactory { |
86 public: | 87 public: |
87 virtual content::WebUIController* CreateWebUIControllerForURL( | 88 virtual WebUIController* CreateWebUIControllerForURL( |
88 content::WebUI* web_ui, const GURL& url) const OVERRIDE { | 89 WebUI* web_ui, const GURL& url) const OVERRIDE { |
89 return NULL; | 90 return NULL; |
90 } | 91 } |
91 virtual content::WebUI::TypeID GetWebUIType( | 92 virtual WebUI::TypeID GetWebUIType(BrowserContext* browser_context, |
92 content::BrowserContext* browser_context, | 93 const GURL& url) const OVERRIDE { |
93 const GURL& url) const OVERRIDE { | 94 return WebUI::kNoWebUI; |
94 return content::WebUI::kNoWebUI; | |
95 } | 95 } |
96 virtual bool UseWebUIForURL(content::BrowserContext* browser_context, | 96 virtual bool UseWebUIForURL(BrowserContext* browser_context, |
97 const GURL& url) const OVERRIDE { | 97 const GURL& url) const OVERRIDE { |
98 return content::GetContentClient()->HasWebUIScheme(url); | 98 return GetContentClient()->HasWebUIScheme(url); |
99 } | 99 } |
100 virtual bool UseWebUIBindingsForURL(content::BrowserContext* browser_context, | 100 virtual bool UseWebUIBindingsForURL(BrowserContext* browser_context, |
101 const GURL& url) const OVERRIDE { | 101 const GURL& url) const OVERRIDE { |
102 return content::GetContentClient()->HasWebUIScheme(url); | 102 return GetContentClient()->HasWebUIScheme(url); |
103 } | 103 } |
104 virtual bool IsURLAcceptableForWebUI( | 104 virtual bool IsURLAcceptableForWebUI( |
105 content::BrowserContext* browser_context, | 105 BrowserContext* browser_context, |
106 const GURL& url, | 106 const GURL& url, |
107 bool data_urls_allowed) const OVERRIDE { | 107 bool data_urls_allowed) const OVERRIDE { |
108 return false; | 108 return false; |
109 } | 109 } |
110 }; | 110 }; |
111 | 111 |
112 class WebUITestClient : public content::ShellContentClient { | 112 class WebUITestClient : public ShellContentClient { |
113 public: | 113 public: |
114 WebUITestClient() { | 114 WebUITestClient() { |
115 } | 115 } |
116 | 116 |
117 virtual bool HasWebUIScheme(const GURL& url) const OVERRIDE { | 117 virtual bool HasWebUIScheme(const GURL& url) const OVERRIDE { |
118 return url.SchemeIs(chrome::kChromeUIScheme); | 118 return url.SchemeIs(chrome::kChromeUIScheme); |
119 } | 119 } |
120 }; | 120 }; |
121 | 121 |
122 class WebUITestBrowserClient : public content::ShellContentBrowserClient { | 122 class WebUITestBrowserClient : public ShellContentBrowserClient { |
123 public: | 123 public: |
124 WebUITestBrowserClient() {} | 124 WebUITestBrowserClient() {} |
125 | 125 |
126 virtual content::WebUIControllerFactory* | 126 virtual WebUIControllerFactory* GetWebUIControllerFactory() OVERRIDE { |
127 GetWebUIControllerFactory() OVERRIDE { | |
128 return &factory_; | 127 return &factory_; |
129 } | 128 } |
130 | 129 |
131 private: | 130 private: |
132 WebUITestWebUIControllerFactory factory_; | 131 WebUITestWebUIControllerFactory factory_; |
133 }; | 132 }; |
134 | 133 |
135 } | 134 } |
136 | 135 |
137 class RenderViewImplTest : public content::RenderViewTest { | 136 class RenderViewImplTest : public RenderViewTest { |
138 public: | 137 public: |
139 RenderViewImplTest() { | 138 RenderViewImplTest() { |
140 // Attach a pseudo keyboard device to this object. | 139 // Attach a pseudo keyboard device to this object. |
141 mock_keyboard_.reset(new MockKeyboard()); | 140 mock_keyboard_.reset(new MockKeyboard()); |
142 } | 141 } |
143 | 142 |
144 RenderViewImpl* view() { | 143 RenderViewImpl* view() { |
145 return static_cast<RenderViewImpl*>(view_); | 144 return static_cast<RenderViewImpl*>(view_); |
146 } | 145 } |
147 | 146 |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 EXPECT_TRUE(render_thread_->sink().GetUniqueMessageMatching( | 296 EXPECT_TRUE(render_thread_->sink().GetUniqueMessageMatching( |
298 ViewHostMsg_UpdateState::ID)); | 297 ViewHostMsg_UpdateState::ID)); |
299 } | 298 } |
300 | 299 |
301 TEST_F(RenderViewImplTest, OnNavigationHttpPost) { | 300 TEST_F(RenderViewImplTest, OnNavigationHttpPost) { |
302 ViewMsg_Navigate_Params nav_params; | 301 ViewMsg_Navigate_Params nav_params; |
303 | 302 |
304 // An http url will trigger a resource load so cannot be used here. | 303 // An http url will trigger a resource load so cannot be used here. |
305 nav_params.url = GURL("data:text/html,<div>Page</div>"); | 304 nav_params.url = GURL("data:text/html,<div>Page</div>"); |
306 nav_params.navigation_type = ViewMsg_Navigate_Type::NORMAL; | 305 nav_params.navigation_type = ViewMsg_Navigate_Type::NORMAL; |
307 nav_params.transition = content::PAGE_TRANSITION_TYPED; | 306 nav_params.transition = PAGE_TRANSITION_TYPED; |
308 nav_params.page_id = -1; | 307 nav_params.page_id = -1; |
309 nav_params.is_post = true; | 308 nav_params.is_post = true; |
310 | 309 |
311 // Set up post data. | 310 // Set up post data. |
312 const unsigned char* raw_data = reinterpret_cast<const unsigned char*>( | 311 const unsigned char* raw_data = reinterpret_cast<const unsigned char*>( |
313 "post \0\ndata"); | 312 "post \0\ndata"); |
314 const unsigned int length = 11; | 313 const unsigned int length = 11; |
315 const std::vector<unsigned char> post_data(raw_data, raw_data + length); | 314 const std::vector<unsigned char> post_data(raw_data, raw_data + length); |
316 nav_params.browser_initiated_post_data = post_data; | 315 nav_params.browser_initiated_post_data = post_data; |
317 | 316 |
(...skipping 18 matching lines...) Expand all Loading... |
336 bool successful = body.elementAt(0, element); | 335 bool successful = body.elementAt(0, element); |
337 EXPECT_TRUE(successful); | 336 EXPECT_TRUE(successful); |
338 EXPECT_EQ(WebKit::WebHTTPBody::Element::TypeData, element.type); | 337 EXPECT_EQ(WebKit::WebHTTPBody::Element::TypeData, element.type); |
339 EXPECT_EQ(length, element.data.size()); | 338 EXPECT_EQ(length, element.data.size()); |
340 EXPECT_EQ(0, memcmp(raw_data, element.data.data(), length)); | 339 EXPECT_EQ(0, memcmp(raw_data, element.data.data(), length)); |
341 } | 340 } |
342 | 341 |
343 TEST_F(RenderViewImplTest, DecideNavigationPolicy) { | 342 TEST_F(RenderViewImplTest, DecideNavigationPolicy) { |
344 WebUITestClient client; | 343 WebUITestClient client; |
345 WebUITestBrowserClient browser_client; | 344 WebUITestBrowserClient browser_client; |
346 content::ContentClient* old_client = content::GetContentClient(); | 345 ContentClient* old_client = GetContentClient(); |
347 content::ContentBrowserClient* old_browser_client = | 346 ContentBrowserClient* old_browser_client = GetContentClient()->browser(); |
348 content::GetContentClient()->browser(); | |
349 | 347 |
350 content::SetContentClient(&client); | 348 SetContentClient(&client); |
351 content::GetContentClient()->set_browser_for_testing(&browser_client); | 349 GetContentClient()->set_browser_for_testing(&browser_client); |
352 client.set_renderer_for_testing(old_client->renderer()); | 350 client.set_renderer_for_testing(old_client->renderer()); |
353 | 351 |
354 // Navigations to normal HTTP URLs can be handled locally. | 352 // Navigations to normal HTTP URLs can be handled locally. |
355 WebKit::WebURLRequest request(GURL("http://foo.com")); | 353 WebKit::WebURLRequest request(GURL("http://foo.com")); |
356 WebKit::WebNavigationPolicy policy = view()->decidePolicyForNavigation( | 354 WebKit::WebNavigationPolicy policy = view()->decidePolicyForNavigation( |
357 GetMainFrame(), | 355 GetMainFrame(), |
358 request, | 356 request, |
359 WebKit::WebNavigationTypeLinkClicked, | 357 WebKit::WebNavigationTypeLinkClicked, |
360 WebKit::WebNode(), | 358 WebKit::WebNode(), |
361 WebKit::WebNavigationPolicyCurrentTab, | 359 WebKit::WebNavigationPolicyCurrentTab, |
(...skipping 16 matching lines...) Expand all Loading... |
378 WebKit::WebURLRequest popup_request(GURL("chrome://foo")); | 376 WebKit::WebURLRequest popup_request(GURL("chrome://foo")); |
379 policy = view()->decidePolicyForNavigation( | 377 policy = view()->decidePolicyForNavigation( |
380 GetMainFrame(), | 378 GetMainFrame(), |
381 popup_request, | 379 popup_request, |
382 WebKit::WebNavigationTypeLinkClicked, | 380 WebKit::WebNavigationTypeLinkClicked, |
383 WebKit::WebNode(), | 381 WebKit::WebNode(), |
384 WebKit::WebNavigationPolicyNewForegroundTab, | 382 WebKit::WebNavigationPolicyNewForegroundTab, |
385 false); | 383 false); |
386 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy); | 384 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy); |
387 | 385 |
388 content::GetContentClient()->set_browser_for_testing(old_browser_client); | 386 GetContentClient()->set_browser_for_testing(old_browser_client); |
389 content::SetContentClient(old_client); | 387 SetContentClient(old_client); |
390 } | 388 } |
391 | 389 |
392 TEST_F(RenderViewImplTest, DecideNavigationPolicyForWebUI) { | 390 TEST_F(RenderViewImplTest, DecideNavigationPolicyForWebUI) { |
393 // Enable bindings to simulate a WebUI view. | 391 // Enable bindings to simulate a WebUI view. |
394 view()->OnAllowBindings(content::BINDINGS_POLICY_WEB_UI); | 392 view()->OnAllowBindings(BINDINGS_POLICY_WEB_UI); |
395 | 393 |
396 // Navigations to normal HTTP URLs will be sent to browser process. | 394 // Navigations to normal HTTP URLs will be sent to browser process. |
397 WebKit::WebURLRequest request(GURL("http://foo.com")); | 395 WebKit::WebURLRequest request(GURL("http://foo.com")); |
398 WebKit::WebNavigationPolicy policy = view()->decidePolicyForNavigation( | 396 WebKit::WebNavigationPolicy policy = view()->decidePolicyForNavigation( |
399 GetMainFrame(), | 397 GetMainFrame(), |
400 request, | 398 request, |
401 WebKit::WebNavigationTypeLinkClicked, | 399 WebKit::WebNavigationTypeLinkClicked, |
402 WebKit::WebNode(), | 400 WebKit::WebNode(), |
403 WebKit::WebNavigationPolicyCurrentTab, | 401 WebKit::WebNavigationPolicyCurrentTab, |
404 false); | 402 false); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 view()->OnSwapOut(params); | 482 view()->OnSwapOut(params); |
485 const IPC::Message* msg2 = render_thread_->sink().GetUniqueMessageMatching( | 483 const IPC::Message* msg2 = render_thread_->sink().GetUniqueMessageMatching( |
486 ViewHostMsg_SwapOut_ACK::ID); | 484 ViewHostMsg_SwapOut_ACK::ID); |
487 ASSERT_TRUE(msg2); | 485 ASSERT_TRUE(msg2); |
488 | 486 |
489 // If we navigate back to this RenderView, ensure we don't send a state | 487 // If we navigate back to this RenderView, ensure we don't send a state |
490 // update for the swapped out URL. (http://crbug.com/72235) | 488 // update for the swapped out URL. (http://crbug.com/72235) |
491 ViewMsg_Navigate_Params nav_params; | 489 ViewMsg_Navigate_Params nav_params; |
492 nav_params.url = GURL("data:text/html,<div>Page B</div>"); | 490 nav_params.url = GURL("data:text/html,<div>Page B</div>"); |
493 nav_params.navigation_type = ViewMsg_Navigate_Type::NORMAL; | 491 nav_params.navigation_type = ViewMsg_Navigate_Type::NORMAL; |
494 nav_params.transition = content::PAGE_TRANSITION_TYPED; | 492 nav_params.transition = PAGE_TRANSITION_TYPED; |
495 nav_params.current_history_list_length = 1; | 493 nav_params.current_history_list_length = 1; |
496 nav_params.current_history_list_offset = 0; | 494 nav_params.current_history_list_offset = 0; |
497 nav_params.pending_history_list_offset = 1; | 495 nav_params.pending_history_list_offset = 1; |
498 nav_params.page_id = -1; | 496 nav_params.page_id = -1; |
499 view()->OnNavigate(nav_params); | 497 view()->OnNavigate(nav_params); |
500 ProcessPendingMessages(); | 498 ProcessPendingMessages(); |
501 const IPC::Message* msg3 = render_thread_->sink().GetUniqueMessageMatching( | 499 const IPC::Message* msg3 = render_thread_->sink().GetUniqueMessageMatching( |
502 ViewHostMsg_UpdateState::ID); | 500 ViewHostMsg_UpdateState::ID); |
503 EXPECT_FALSE(msg3); | 501 EXPECT_FALSE(msg3); |
504 } | 502 } |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
546 int page_id_C; | 544 int page_id_C; |
547 std::string state_C; | 545 std::string state_C; |
548 ViewHostMsg_UpdateState::Read(msg_C, &page_id_C, &state_C); | 546 ViewHostMsg_UpdateState::Read(msg_C, &page_id_C, &state_C); |
549 EXPECT_EQ(3, page_id_C); | 547 EXPECT_EQ(3, page_id_C); |
550 EXPECT_NE(state_B, state_C); | 548 EXPECT_NE(state_B, state_C); |
551 render_thread_->sink().ClearMessages(); | 549 render_thread_->sink().ClearMessages(); |
552 | 550 |
553 // Go back to C and commit, preparing for our real test. | 551 // Go back to C and commit, preparing for our real test. |
554 ViewMsg_Navigate_Params params_C; | 552 ViewMsg_Navigate_Params params_C; |
555 params_C.navigation_type = ViewMsg_Navigate_Type::NORMAL; | 553 params_C.navigation_type = ViewMsg_Navigate_Type::NORMAL; |
556 params_C.transition = content::PAGE_TRANSITION_FORWARD_BACK; | 554 params_C.transition = PAGE_TRANSITION_FORWARD_BACK; |
557 params_C.current_history_list_length = 4; | 555 params_C.current_history_list_length = 4; |
558 params_C.current_history_list_offset = 3; | 556 params_C.current_history_list_offset = 3; |
559 params_C.pending_history_list_offset = 2; | 557 params_C.pending_history_list_offset = 2; |
560 params_C.page_id = 3; | 558 params_C.page_id = 3; |
561 params_C.state = state_C; | 559 params_C.state = state_C; |
562 view()->OnNavigate(params_C); | 560 view()->OnNavigate(params_C); |
563 ProcessPendingMessages(); | 561 ProcessPendingMessages(); |
564 render_thread_->sink().ClearMessages(); | 562 render_thread_->sink().ClearMessages(); |
565 | 563 |
566 // Go back twice quickly, such that page B does not have a chance to commit. | 564 // Go back twice quickly, such that page B does not have a chance to commit. |
567 // This leads to two changes to the back/forward list but only one change to | 565 // This leads to two changes to the back/forward list but only one change to |
568 // the RenderView's page ID. | 566 // the RenderView's page ID. |
569 | 567 |
570 // Back to page B (page_id 2), without committing. | 568 // Back to page B (page_id 2), without committing. |
571 ViewMsg_Navigate_Params params_B; | 569 ViewMsg_Navigate_Params params_B; |
572 params_B.navigation_type = ViewMsg_Navigate_Type::NORMAL; | 570 params_B.navigation_type = ViewMsg_Navigate_Type::NORMAL; |
573 params_B.transition = content::PAGE_TRANSITION_FORWARD_BACK; | 571 params_B.transition = PAGE_TRANSITION_FORWARD_BACK; |
574 params_B.current_history_list_length = 4; | 572 params_B.current_history_list_length = 4; |
575 params_B.current_history_list_offset = 2; | 573 params_B.current_history_list_offset = 2; |
576 params_B.pending_history_list_offset = 1; | 574 params_B.pending_history_list_offset = 1; |
577 params_B.page_id = 2; | 575 params_B.page_id = 2; |
578 params_B.state = state_B; | 576 params_B.state = state_B; |
579 view()->OnNavigate(params_B); | 577 view()->OnNavigate(params_B); |
580 | 578 |
581 // Back to page A (page_id 1) and commit. | 579 // Back to page A (page_id 1) and commit. |
582 ViewMsg_Navigate_Params params; | 580 ViewMsg_Navigate_Params params; |
583 params.navigation_type = ViewMsg_Navigate_Type::NORMAL; | 581 params.navigation_type = ViewMsg_Navigate_Type::NORMAL; |
584 params.transition = content::PAGE_TRANSITION_FORWARD_BACK; | 582 params.transition = PAGE_TRANSITION_FORWARD_BACK; |
585 params_B.current_history_list_length = 4; | 583 params_B.current_history_list_length = 4; |
586 params_B.current_history_list_offset = 2; | 584 params_B.current_history_list_offset = 2; |
587 params_B.pending_history_list_offset = 0; | 585 params_B.pending_history_list_offset = 0; |
588 params.page_id = 1; | 586 params.page_id = 1; |
589 params.state = state_A; | 587 params.state = state_A; |
590 view()->OnNavigate(params); | 588 view()->OnNavigate(params); |
591 ProcessPendingMessages(); | 589 ProcessPendingMessages(); |
592 | 590 |
593 // Now ensure that the UpdateState message we receive is consistent | 591 // Now ensure that the UpdateState message we receive is consistent |
594 // and represents page C in both page_id and state. | 592 // and represents page C in both page_id and state. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
626 ASSERT_TRUE(msg_A); | 624 ASSERT_TRUE(msg_A); |
627 int page_id_A; | 625 int page_id_A; |
628 std::string state_A; | 626 std::string state_A; |
629 ViewHostMsg_UpdateState::Read(msg_A, &page_id_A, &state_A); | 627 ViewHostMsg_UpdateState::Read(msg_A, &page_id_A, &state_A); |
630 EXPECT_EQ(1, page_id_A); | 628 EXPECT_EQ(1, page_id_A); |
631 render_thread_->sink().ClearMessages(); | 629 render_thread_->sink().ClearMessages(); |
632 | 630 |
633 // Back to page A (page_id 1) and commit. | 631 // Back to page A (page_id 1) and commit. |
634 ViewMsg_Navigate_Params params_A; | 632 ViewMsg_Navigate_Params params_A; |
635 params_A.navigation_type = ViewMsg_Navigate_Type::NORMAL; | 633 params_A.navigation_type = ViewMsg_Navigate_Type::NORMAL; |
636 params_A.transition = content::PAGE_TRANSITION_FORWARD_BACK; | 634 params_A.transition = PAGE_TRANSITION_FORWARD_BACK; |
637 params_A.current_history_list_length = 2; | 635 params_A.current_history_list_length = 2; |
638 params_A.current_history_list_offset = 1; | 636 params_A.current_history_list_offset = 1; |
639 params_A.pending_history_list_offset = 0; | 637 params_A.pending_history_list_offset = 0; |
640 params_A.page_id = 1; | 638 params_A.page_id = 1; |
641 params_A.state = state_A; | 639 params_A.state = state_A; |
642 view()->OnNavigate(params_A); | 640 view()->OnNavigate(params_A); |
643 ProcessPendingMessages(); | 641 ProcessPendingMessages(); |
644 | 642 |
645 // A new navigation commits, clearing the forward history. | 643 // A new navigation commits, clearing the forward history. |
646 LoadHTML("<div>Page C</div>"); | 644 LoadHTML("<div>Page C</div>"); |
647 EXPECT_EQ(2, view()->history_list_length_); | 645 EXPECT_EQ(2, view()->history_list_length_); |
648 EXPECT_EQ(1, view()->history_list_offset_); | 646 EXPECT_EQ(1, view()->history_list_offset_); |
649 EXPECT_EQ(3, view()->history_page_ids_[1]); | 647 EXPECT_EQ(3, view()->history_page_ids_[1]); |
650 | 648 |
651 // The browser then sends a stale navigation to B, which should be ignored. | 649 // The browser then sends a stale navigation to B, which should be ignored. |
652 ViewMsg_Navigate_Params params_B; | 650 ViewMsg_Navigate_Params params_B; |
653 params_B.navigation_type = ViewMsg_Navigate_Type::NORMAL; | 651 params_B.navigation_type = ViewMsg_Navigate_Type::NORMAL; |
654 params_B.transition = content::PAGE_TRANSITION_FORWARD_BACK; | 652 params_B.transition = PAGE_TRANSITION_FORWARD_BACK; |
655 params_B.current_history_list_length = 2; | 653 params_B.current_history_list_length = 2; |
656 params_B.current_history_list_offset = 0; | 654 params_B.current_history_list_offset = 0; |
657 params_B.pending_history_list_offset = 1; | 655 params_B.pending_history_list_offset = 1; |
658 params_B.page_id = 2; | 656 params_B.page_id = 2; |
659 params_B.state = state_A; // Doesn't matter, just has to be present. | 657 params_B.state = state_A; // Doesn't matter, just has to be present. |
660 view()->OnNavigate(params_B); | 658 view()->OnNavigate(params_B); |
661 | 659 |
662 // State should be unchanged. | 660 // State should be unchanged. |
663 EXPECT_EQ(2, view()->history_list_length_); | 661 EXPECT_EQ(2, view()->history_list_length_); |
664 EXPECT_EQ(1, view()->history_list_offset_); | 662 EXPECT_EQ(1, view()->history_list_offset_); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
708 std::string state_B; | 706 std::string state_B; |
709 ViewHostMsg_UpdateState::Read(msg_B, &page_id_B, &state_B); | 707 ViewHostMsg_UpdateState::Read(msg_B, &page_id_B, &state_B); |
710 EXPECT_EQ(2, page_id_B); | 708 EXPECT_EQ(2, page_id_B); |
711 render_thread_->sink().ClearMessages(); | 709 render_thread_->sink().ClearMessages(); |
712 | 710 |
713 // Suppose the browser has limited the number of NavigationEntries to 2. | 711 // Suppose the browser has limited the number of NavigationEntries to 2. |
714 // It has now dropped the first entry, but the renderer isn't notified. | 712 // It has now dropped the first entry, but the renderer isn't notified. |
715 // Ensure that going back to page B (page_id 2) at offset 0 is successful. | 713 // Ensure that going back to page B (page_id 2) at offset 0 is successful. |
716 ViewMsg_Navigate_Params params_B; | 714 ViewMsg_Navigate_Params params_B; |
717 params_B.navigation_type = ViewMsg_Navigate_Type::NORMAL; | 715 params_B.navigation_type = ViewMsg_Navigate_Type::NORMAL; |
718 params_B.transition = content::PAGE_TRANSITION_FORWARD_BACK; | 716 params_B.transition = PAGE_TRANSITION_FORWARD_BACK; |
719 params_B.current_history_list_length = 2; | 717 params_B.current_history_list_length = 2; |
720 params_B.current_history_list_offset = 1; | 718 params_B.current_history_list_offset = 1; |
721 params_B.pending_history_list_offset = 0; | 719 params_B.pending_history_list_offset = 0; |
722 params_B.page_id = 2; | 720 params_B.page_id = 2; |
723 params_B.state = state_B; | 721 params_B.state = state_B; |
724 view()->OnNavigate(params_B); | 722 view()->OnNavigate(params_B); |
725 ProcessPendingMessages(); | 723 ProcessPendingMessages(); |
726 | 724 |
727 EXPECT_EQ(2, view()->history_list_length_); | 725 EXPECT_EQ(2, view()->history_list_length_); |
728 EXPECT_EQ(0, view()->history_list_offset_); | 726 EXPECT_EQ(0, view()->history_list_offset_); |
(...skipping 964 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1693 EXPECT_EQ(0, bounds[i].width()); | 1691 EXPECT_EQ(0, bounds[i].width()); |
1694 } else { | 1692 } else { |
1695 EXPECT_LT(0, bounds[i].width()); | 1693 EXPECT_LT(0, bounds[i].width()); |
1696 } | 1694 } |
1697 } | 1695 } |
1698 view()->OnImeConfirmComposition(empty_string, ui::Range::InvalidRange()); | 1696 view()->OnImeConfirmComposition(empty_string, ui::Range::InvalidRange()); |
1699 } | 1697 } |
1700 | 1698 |
1701 TEST_F(RenderViewImplTest, ZoomLimit) { | 1699 TEST_F(RenderViewImplTest, ZoomLimit) { |
1702 const double kMinZoomLevel = | 1700 const double kMinZoomLevel = |
1703 WebKit::WebView::zoomFactorToZoomLevel(content::kMinimumZoomFactor); | 1701 WebKit::WebView::zoomFactorToZoomLevel(kMinimumZoomFactor); |
1704 const double kMaxZoomLevel = | 1702 const double kMaxZoomLevel = |
1705 WebKit::WebView::zoomFactorToZoomLevel(content::kMaximumZoomFactor); | 1703 WebKit::WebView::zoomFactorToZoomLevel(kMaximumZoomFactor); |
1706 | 1704 |
1707 ViewMsg_Navigate_Params params; | 1705 ViewMsg_Navigate_Params params; |
1708 params.page_id = -1; | 1706 params.page_id = -1; |
1709 params.navigation_type = ViewMsg_Navigate_Type::NORMAL; | 1707 params.navigation_type = ViewMsg_Navigate_Type::NORMAL; |
1710 | 1708 |
1711 // Verifies navigation to a URL with preset zoom level indeed sets the level. | 1709 // Verifies navigation to a URL with preset zoom level indeed sets the level. |
1712 // Regression test for http://crbug.com/139559, where the level was not | 1710 // Regression test for http://crbug.com/139559, where the level was not |
1713 // properly set when it is out of the default zoom limits of WebView. | 1711 // properly set when it is out of the default zoom limits of WebView. |
1714 params.url = GURL("data:text/html,min_zoomlimit_test"); | 1712 params.url = GURL("data:text/html,min_zoomlimit_test"); |
1715 view()->OnSetZoomLevelForLoadingURL(params.url, kMinZoomLevel); | 1713 view()->OnSetZoomLevelForLoadingURL(params.url, kMinZoomLevel); |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1783 EXPECT_EQ("abcdefgopqrstuvwxyz", info.value); | 1781 EXPECT_EQ("abcdefgopqrstuvwxyz", info.value); |
1784 EXPECT_EQ(7, info.selectionStart); | 1782 EXPECT_EQ(7, info.selectionStart); |
1785 EXPECT_EQ(7, info.selectionEnd); | 1783 EXPECT_EQ(7, info.selectionEnd); |
1786 view()->OnSetEditableSelectionOffsets(4, 8); | 1784 view()->OnSetEditableSelectionOffsets(4, 8); |
1787 view()->OnExtendSelectionAndDelete(2, 5); | 1785 view()->OnExtendSelectionAndDelete(2, 5); |
1788 info = view()->webview()->textInputInfo(); | 1786 info = view()->webview()->textInputInfo(); |
1789 EXPECT_EQ("abuvwxyz", info.value); | 1787 EXPECT_EQ("abuvwxyz", info.value); |
1790 EXPECT_EQ(2, info.selectionStart); | 1788 EXPECT_EQ(2, info.selectionStart); |
1791 EXPECT_EQ(2, info.selectionEnd); | 1789 EXPECT_EQ(2, info.selectionEnd); |
1792 } | 1790 } |
| 1791 |
| 1792 } // namespace content |
OLD | NEW |