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

Side by Side Diff: content/renderer/render_view_browsertest.cc

Issue 358973005: Navigation transitions: Pass is_transition_navigation flag up to the embedder (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Test fix Created 6 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 | Annotate | Revision Log
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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/bind.h" 6 #include "base/bind.h"
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/memory/shared_memory.h" 8 #include "base/memory/shared_memory.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 359
360 TEST_F(RenderViewImplTest, DecideNavigationPolicy) { 360 TEST_F(RenderViewImplTest, DecideNavigationPolicy) {
361 WebUITestWebUIControllerFactory factory; 361 WebUITestWebUIControllerFactory factory;
362 WebUIControllerFactory::RegisterFactory(&factory); 362 WebUIControllerFactory::RegisterFactory(&factory);
363 363
364 DocumentState state; 364 DocumentState state;
365 state.set_navigation_state(NavigationState::CreateContentInitiated()); 365 state.set_navigation_state(NavigationState::CreateContentInitiated());
366 366
367 // Navigations to normal HTTP URLs can be handled locally. 367 // Navigations to normal HTTP URLs can be handled locally.
368 blink::WebURLRequest request(GURL("http://foo.com")); 368 blink::WebURLRequest request(GURL("http://foo.com"));
369 blink::WebFrameClient::NavigationPolicyInfo policy_info(request);
370 policy_info.frame = GetMainFrame();
371 policy_info.extraData = &state;
372 policy_info.navigationType = blink::WebNavigationTypeLinkClicked;
373 policy_info.defaultPolicy = blink::WebNavigationPolicyCurrentTab;
369 blink::WebNavigationPolicy policy = frame()->decidePolicyForNavigation( 374 blink::WebNavigationPolicy policy = frame()->decidePolicyForNavigation(
370 GetMainFrame(), 375 policy_info);
371 &state,
372 request,
373 blink::WebNavigationTypeLinkClicked,
374 blink::WebNavigationPolicyCurrentTab,
375 false);
376 EXPECT_EQ(blink::WebNavigationPolicyCurrentTab, policy); 376 EXPECT_EQ(blink::WebNavigationPolicyCurrentTab, policy);
377 377
378 // Verify that form posts to WebUI URLs will be sent to the browser process. 378 // Verify that form posts to WebUI URLs will be sent to the browser process.
379 blink::WebURLRequest form_request(GURL("chrome://foo")); 379 blink::WebURLRequest form_request(GURL("chrome://foo"));
380 blink::WebFrameClient::NavigationPolicyInfo form_policy_info(form_request);
381 form_policy_info.frame = GetMainFrame();
382 form_policy_info.extraData = &state;
383 form_policy_info.navigationType = blink::WebNavigationTypeFormSubmitted;
384 form_policy_info.defaultPolicy = blink::WebNavigationPolicyCurrentTab;
380 form_request.setHTTPMethod("POST"); 385 form_request.setHTTPMethod("POST");
381 policy = frame()->decidePolicyForNavigation( 386 policy = frame()->decidePolicyForNavigation(form_policy_info);
382 GetMainFrame(),
383 &state,
384 form_request,
385 blink::WebNavigationTypeFormSubmitted,
386 blink::WebNavigationPolicyCurrentTab,
387 false);
388 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy); 387 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy);
389 388
390 // Verify that popup links to WebUI URLs also are sent to browser. 389 // Verify that popup links to WebUI URLs also are sent to browser.
391 blink::WebURLRequest popup_request(GURL("chrome://foo")); 390 blink::WebURLRequest popup_request(GURL("chrome://foo"));
392 policy = frame()->decidePolicyForNavigation( 391 blink::WebFrameClient::NavigationPolicyInfo popup_policy_info(popup_request);
393 GetMainFrame(), 392 popup_policy_info.frame = GetMainFrame();
394 &state, 393 popup_policy_info.extraData = &state;
395 popup_request, 394 popup_policy_info.navigationType = blink::WebNavigationTypeLinkClicked;
396 blink::WebNavigationTypeLinkClicked, 395 popup_policy_info.defaultPolicy = blink::WebNavigationPolicyNewForegroundTab;
397 blink::WebNavigationPolicyNewForegroundTab, 396 policy = frame()->decidePolicyForNavigation(popup_policy_info);
398 false);
399 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy); 397 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy);
400 } 398 }
401 399
402 TEST_F(RenderViewImplTest, DecideNavigationPolicyHandlesAllTopLevel) { 400 TEST_F(RenderViewImplTest, DecideNavigationPolicyHandlesAllTopLevel) {
403 DocumentState state; 401 DocumentState state;
404 state.set_navigation_state(NavigationState::CreateContentInitiated()); 402 state.set_navigation_state(NavigationState::CreateContentInitiated());
405 403
406 RendererPreferences prefs = view()->renderer_preferences(); 404 RendererPreferences prefs = view()->renderer_preferences();
407 prefs.browser_handles_all_top_level_requests = true; 405 prefs.browser_handles_all_top_level_requests = true;
408 view()->OnSetRendererPrefs(prefs); 406 view()->OnSetRendererPrefs(prefs);
409 407
410 const blink::WebNavigationType kNavTypes[] = { 408 const blink::WebNavigationType kNavTypes[] = {
411 blink::WebNavigationTypeLinkClicked, 409 blink::WebNavigationTypeLinkClicked,
412 blink::WebNavigationTypeFormSubmitted, 410 blink::WebNavigationTypeFormSubmitted,
413 blink::WebNavigationTypeBackForward, 411 blink::WebNavigationTypeBackForward,
414 blink::WebNavigationTypeReload, 412 blink::WebNavigationTypeReload,
415 blink::WebNavigationTypeFormResubmitted, 413 blink::WebNavigationTypeFormResubmitted,
416 blink::WebNavigationTypeOther, 414 blink::WebNavigationTypeOther,
417 }; 415 };
418 416
419 blink::WebURLRequest request(GURL("http://foo.com")); 417 blink::WebURLRequest request(GURL("http://foo.com"));
418 blink::WebFrameClient::NavigationPolicyInfo policy_info(request);
419 policy_info.frame = GetMainFrame();
420 policy_info.extraData = &state;
421 policy_info.defaultPolicy = blink::WebNavigationPolicyCurrentTab;
422
420 for (size_t i = 0; i < arraysize(kNavTypes); ++i) { 423 for (size_t i = 0; i < arraysize(kNavTypes); ++i) {
424 policy_info.navigationType = kNavTypes[i];
425
421 blink::WebNavigationPolicy policy = frame()->decidePolicyForNavigation( 426 blink::WebNavigationPolicy policy = frame()->decidePolicyForNavigation(
422 GetMainFrame(), 427 policy_info);
423 &state,
424 request,
425 kNavTypes[i],
426 blink::WebNavigationPolicyCurrentTab,
427 false);
428 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy); 428 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy);
429 } 429 }
430 } 430 }
431 431
432 TEST_F(RenderViewImplTest, DecideNavigationPolicyForWebUI) { 432 TEST_F(RenderViewImplTest, DecideNavigationPolicyForWebUI) {
433 // Enable bindings to simulate a WebUI view. 433 // Enable bindings to simulate a WebUI view.
434 view()->OnAllowBindings(BINDINGS_POLICY_WEB_UI); 434 view()->OnAllowBindings(BINDINGS_POLICY_WEB_UI);
435 435
436 DocumentState state; 436 DocumentState state;
437 state.set_navigation_state(NavigationState::CreateContentInitiated()); 437 state.set_navigation_state(NavigationState::CreateContentInitiated());
438 438
439 // Navigations to normal HTTP URLs will be sent to browser process. 439 // Navigations to normal HTTP URLs will be sent to browser process.
440 blink::WebURLRequest request(GURL("http://foo.com")); 440 blink::WebURLRequest request(GURL("http://foo.com"));
441 blink::WebFrameClient::NavigationPolicyInfo policy_info(request);
442 policy_info.frame = GetMainFrame();
443 policy_info.extraData = &state;
444 policy_info.navigationType = blink::WebNavigationTypeLinkClicked;
445 policy_info.defaultPolicy = blink::WebNavigationPolicyCurrentTab;
446
441 blink::WebNavigationPolicy policy = frame()->decidePolicyForNavigation( 447 blink::WebNavigationPolicy policy = frame()->decidePolicyForNavigation(
442 GetMainFrame(), 448 policy_info);
443 &state,
444 request,
445 blink::WebNavigationTypeLinkClicked,
446 blink::WebNavigationPolicyCurrentTab,
447 false);
448 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy); 449 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy);
449 450
450 // Navigations to WebUI URLs will also be sent to browser process. 451 // Navigations to WebUI URLs will also be sent to browser process.
451 blink::WebURLRequest webui_request(GURL("chrome://foo")); 452 blink::WebURLRequest webui_request(GURL("chrome://foo"));
452 policy = frame()->decidePolicyForNavigation( 453 blink::WebFrameClient::NavigationPolicyInfo webui_policy_info(webui_request);
453 GetMainFrame(), 454 webui_policy_info.frame = GetMainFrame();
454 &state, 455 webui_policy_info.extraData = &state;
455 webui_request, 456 webui_policy_info.navigationType = blink::WebNavigationTypeLinkClicked;
456 blink::WebNavigationTypeLinkClicked, 457 webui_policy_info.defaultPolicy = blink::WebNavigationPolicyCurrentTab;
457 blink::WebNavigationPolicyCurrentTab, 458 policy = frame()->decidePolicyForNavigation(webui_policy_info);
458 false);
459 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy); 459 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy);
460 460
461 // Verify that form posts to data URLs will be sent to the browser process. 461 // Verify that form posts to data URLs will be sent to the browser process.
462 blink::WebURLRequest data_request(GURL("data:text/html,foo")); 462 blink::WebURLRequest data_request(GURL("data:text/html,foo"));
463 blink::WebFrameClient::NavigationPolicyInfo data_policy_info(data_request);
464 data_policy_info.frame = GetMainFrame();
465 data_policy_info.extraData = &state;
466 data_policy_info.navigationType = blink::WebNavigationTypeFormSubmitted;
467 data_policy_info.defaultPolicy = blink::WebNavigationPolicyCurrentTab;
463 data_request.setHTTPMethod("POST"); 468 data_request.setHTTPMethod("POST");
464 policy = frame()->decidePolicyForNavigation( 469 policy = frame()->decidePolicyForNavigation(data_policy_info);
465 GetMainFrame(),
466 &state,
467 data_request,
468 blink::WebNavigationTypeFormSubmitted,
469 blink::WebNavigationPolicyCurrentTab,
470 false);
471 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy); 470 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy);
472 471
473 // Verify that a popup that creates a view first and then navigates to a 472 // Verify that a popup that creates a view first and then navigates to a
474 // normal HTTP URL will be sent to the browser process, even though the 473 // normal HTTP URL will be sent to the browser process, even though the
475 // new view does not have any enabled_bindings_. 474 // new view does not have any enabled_bindings_.
476 blink::WebURLRequest popup_request(GURL("http://foo.com")); 475 blink::WebURLRequest popup_request(GURL("http://foo.com"));
477 blink::WebView* new_web_view = view()->createView( 476 blink::WebView* new_web_view = view()->createView(
478 GetMainFrame(), popup_request, blink::WebWindowFeatures(), "foo", 477 GetMainFrame(), popup_request, blink::WebWindowFeatures(), "foo",
479 blink::WebNavigationPolicyNewForegroundTab, false); 478 blink::WebNavigationPolicyNewForegroundTab, false);
480 RenderViewImpl* new_view = RenderViewImpl::FromWebView(new_web_view); 479 RenderViewImpl* new_view = RenderViewImpl::FromWebView(new_web_view);
480 blink::WebFrameClient::NavigationPolicyInfo popup_policy_info(popup_request);
481 popup_policy_info.frame = new_web_view->mainFrame()->toWebLocalFrame();
482 popup_policy_info.extraData = &state;
483 popup_policy_info.navigationType = blink::WebNavigationTypeLinkClicked;
484 popup_policy_info.defaultPolicy = blink::WebNavigationPolicyNewForegroundTab;
481 policy = static_cast<RenderFrameImpl*>(new_view->GetMainRenderFrame())-> 485 policy = static_cast<RenderFrameImpl*>(new_view->GetMainRenderFrame())->
482 decidePolicyForNavigation( 486 decidePolicyForNavigation(popup_policy_info);
483 new_web_view->mainFrame()->toWebLocalFrame(),
484 &state,
485 popup_request,
486 blink::WebNavigationTypeLinkClicked,
487 blink::WebNavigationPolicyNewForegroundTab,
488 false);
489 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy); 487 EXPECT_EQ(blink::WebNavigationPolicyIgnore, policy);
490 488
491 // Clean up after the new view so we don't leak it. 489 // Clean up after the new view so we don't leak it.
492 new_view->Close(); 490 new_view->Close();
493 new_view->Release(); 491 new_view->Release();
494 } 492 }
495 493
496 // Ensure the RenderViewImpl sends an ACK to a SwapOut request, even if it is 494 // Ensure the RenderViewImpl sends an ACK to a SwapOut request, even if it is
497 // already swapped out. http://crbug.com/93427. 495 // already swapped out. http://crbug.com/93427.
498 TEST_F(RenderViewImplTest, SendSwapOutACK) { 496 TEST_F(RenderViewImplTest, SendSwapOutACK) {
(...skipping 1933 matching lines...) Expand 10 before | Expand all | Expand 10 after
2432 ProcessPendingMessages(); 2430 ProcessPendingMessages();
2433 base::Time after_navigation = 2431 base::Time after_navigation =
2434 base::Time::Now() + base::TimeDelta::FromDays(1); 2432 base::Time::Now() + base::TimeDelta::FromDays(1);
2435 2433
2436 base::Time late_nav_reported_start = 2434 base::Time late_nav_reported_start =
2437 base::Time::FromDoubleT(GetMainFrame()->performance().navigationStart()); 2435 base::Time::FromDoubleT(GetMainFrame()->performance().navigationStart());
2438 EXPECT_LE(late_nav_reported_start, after_navigation); 2436 EXPECT_LE(late_nav_reported_start, after_navigation);
2439 } 2437 }
2440 2438
2441 } // namespace content 2439 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.cc ('k') | content/shell/renderer/test_runner/web_frame_test_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698