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

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

Issue 14188060: Change decidePolicyForNavigation() to takea WebDataSource::ExtraData (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 7 years, 7 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
« no previous file with comments | « content/public/renderer/navigation_state.h ('k') | content/renderer/render_view_impl.h » ('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 (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/view_messages.h" 10 #include "content/common/view_messages.h"
11 #include "content/public/browser/native_web_keyboard_event.h" 11 #include "content/public/browser/native_web_keyboard_event.h"
12 #include "content/public/browser/web_ui_controller_factory.h" 12 #include "content/public/browser/web_ui_controller_factory.h"
13 #include "content/public/common/bindings_policy.h" 13 #include "content/public/common/bindings_policy.h"
14 #include "content/public/common/url_constants.h" 14 #include "content/public/common/url_constants.h"
15 #include "content/public/renderer/document_state.h"
16 #include "content/public/renderer/navigation_state.h"
15 #include "content/public/test/render_view_test.h" 17 #include "content/public/test/render_view_test.h"
16 #include "content/renderer/render_view_impl.h" 18 #include "content/renderer/render_view_impl.h"
17 #include "content/shell/shell_content_browser_client.h" 19 #include "content/shell/shell_content_browser_client.h"
18 #include "content/shell/shell_content_client.h" 20 #include "content/shell/shell_content_client.h"
19 #include "content/test/mock_keyboard.h" 21 #include "content/test/mock_keyboard.h"
20 #include "net/base/net_errors.h" 22 #include "net/base/net_errors.h"
21 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
22 #include "third_party/WebKit/Source/Platform/chromium/public/WebData.h" 24 #include "third_party/WebKit/Source/Platform/chromium/public/WebData.h"
23 #include "third_party/WebKit/Source/Platform/chromium/public/WebHTTPBody.h" 25 #include "third_party/WebKit/Source/Platform/chromium/public/WebHTTPBody.h"
24 #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h" 26 #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h"
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 EXPECT_TRUE(successful); 310 EXPECT_TRUE(successful);
309 EXPECT_EQ(WebKit::WebHTTPBody::Element::TypeData, element.type); 311 EXPECT_EQ(WebKit::WebHTTPBody::Element::TypeData, element.type);
310 EXPECT_EQ(length, element.data.size()); 312 EXPECT_EQ(length, element.data.size());
311 EXPECT_EQ(0, memcmp(raw_data, element.data.data(), length)); 313 EXPECT_EQ(0, memcmp(raw_data, element.data.data(), length));
312 } 314 }
313 315
314 TEST_F(RenderViewImplTest, DecideNavigationPolicy) { 316 TEST_F(RenderViewImplTest, DecideNavigationPolicy) {
315 WebUITestWebUIControllerFactory factory; 317 WebUITestWebUIControllerFactory factory;
316 WebUIControllerFactory::RegisterFactory(&factory); 318 WebUIControllerFactory::RegisterFactory(&factory);
317 319
320 DocumentState state;
321 state.set_navigation_state(NavigationState::CreateContentInitiated());
322
318 // Navigations to normal HTTP URLs can be handled locally. 323 // Navigations to normal HTTP URLs can be handled locally.
319 WebKit::WebURLRequest request(GURL("http://foo.com")); 324 WebKit::WebURLRequest request(GURL("http://foo.com"));
320 WebKit::WebNavigationPolicy policy = view()->decidePolicyForNavigation( 325 WebKit::WebNavigationPolicy policy = view()->decidePolicyForNavigation(
321 GetMainFrame(), 326 GetMainFrame(),
327 &state,
322 request, 328 request,
323 WebKit::WebNavigationTypeLinkClicked, 329 WebKit::WebNavigationTypeLinkClicked,
324 WebKit::WebNavigationPolicyCurrentTab, 330 WebKit::WebNavigationPolicyCurrentTab,
325 false); 331 false);
326 EXPECT_EQ(WebKit::WebNavigationPolicyCurrentTab, policy); 332 EXPECT_EQ(WebKit::WebNavigationPolicyCurrentTab, policy);
327 333
328 // Verify that form posts to WebUI URLs will be sent to the browser process. 334 // Verify that form posts to WebUI URLs will be sent to the browser process.
329 WebKit::WebURLRequest form_request(GURL("chrome://foo")); 335 WebKit::WebURLRequest form_request(GURL("chrome://foo"));
330 form_request.setHTTPMethod("POST"); 336 form_request.setHTTPMethod("POST");
331 policy = view()->decidePolicyForNavigation( 337 policy = view()->decidePolicyForNavigation(
332 GetMainFrame(), 338 GetMainFrame(),
339 &state,
333 form_request, 340 form_request,
334 WebKit::WebNavigationTypeFormSubmitted, 341 WebKit::WebNavigationTypeFormSubmitted,
335 WebKit::WebNavigationPolicyCurrentTab, 342 WebKit::WebNavigationPolicyCurrentTab,
336 false); 343 false);
337 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy); 344 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy);
338 345
339 // Verify that popup links to WebUI URLs also are sent to browser. 346 // Verify that popup links to WebUI URLs also are sent to browser.
340 WebKit::WebURLRequest popup_request(GURL("chrome://foo")); 347 WebKit::WebURLRequest popup_request(GURL("chrome://foo"));
341 policy = view()->decidePolicyForNavigation( 348 policy = view()->decidePolicyForNavigation(
342 GetMainFrame(), 349 GetMainFrame(),
350 &state,
343 popup_request, 351 popup_request,
344 WebKit::WebNavigationTypeLinkClicked, 352 WebKit::WebNavigationTypeLinkClicked,
345 WebKit::WebNavigationPolicyNewForegroundTab, 353 WebKit::WebNavigationPolicyNewForegroundTab,
346 false); 354 false);
347 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy); 355 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy);
348 } 356 }
349 357
350 TEST_F(RenderViewImplTest, DecideNavigationPolicyForWebUI) { 358 TEST_F(RenderViewImplTest, DecideNavigationPolicyForWebUI) {
351 // Enable bindings to simulate a WebUI view. 359 // Enable bindings to simulate a WebUI view.
352 view()->OnAllowBindings(BINDINGS_POLICY_WEB_UI); 360 view()->OnAllowBindings(BINDINGS_POLICY_WEB_UI);
353 361
362 DocumentState state;
363 state.set_navigation_state(NavigationState::CreateContentInitiated());
364
354 // Navigations to normal HTTP URLs will be sent to browser process. 365 // Navigations to normal HTTP URLs will be sent to browser process.
355 WebKit::WebURLRequest request(GURL("http://foo.com")); 366 WebKit::WebURLRequest request(GURL("http://foo.com"));
356 WebKit::WebNavigationPolicy policy = view()->decidePolicyForNavigation( 367 WebKit::WebNavigationPolicy policy = view()->decidePolicyForNavigation(
357 GetMainFrame(), 368 GetMainFrame(),
369 &state,
358 request, 370 request,
359 WebKit::WebNavigationTypeLinkClicked, 371 WebKit::WebNavigationTypeLinkClicked,
360 WebKit::WebNavigationPolicyCurrentTab, 372 WebKit::WebNavigationPolicyCurrentTab,
361 false); 373 false);
362 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy); 374 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy);
363 375
364 // Navigations to WebUI URLs will also be sent to browser process. 376 // Navigations to WebUI URLs will also be sent to browser process.
365 WebKit::WebURLRequest webui_request(GURL("chrome://foo")); 377 WebKit::WebURLRequest webui_request(GURL("chrome://foo"));
366 policy = view()->decidePolicyForNavigation( 378 policy = view()->decidePolicyForNavigation(
367 GetMainFrame(), 379 GetMainFrame(),
380 &state,
368 webui_request, 381 webui_request,
369 WebKit::WebNavigationTypeLinkClicked, 382 WebKit::WebNavigationTypeLinkClicked,
370 WebKit::WebNavigationPolicyCurrentTab, 383 WebKit::WebNavigationPolicyCurrentTab,
371 false); 384 false);
372 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy); 385 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy);
373 386
374 // Verify that form posts to data URLs will be sent to the browser process. 387 // Verify that form posts to data URLs will be sent to the browser process.
375 WebKit::WebURLRequest data_request(GURL("data:text/html,foo")); 388 WebKit::WebURLRequest data_request(GURL("data:text/html,foo"));
376 data_request.setHTTPMethod("POST"); 389 data_request.setHTTPMethod("POST");
377 policy = view()->decidePolicyForNavigation( 390 policy = view()->decidePolicyForNavigation(
378 GetMainFrame(), 391 GetMainFrame(),
392 &state,
379 data_request, 393 data_request,
380 WebKit::WebNavigationTypeFormSubmitted, 394 WebKit::WebNavigationTypeFormSubmitted,
381 WebKit::WebNavigationPolicyCurrentTab, 395 WebKit::WebNavigationPolicyCurrentTab,
382 false); 396 false);
383 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy); 397 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy);
384 398
385 // Verify that a popup that creates a view first and then navigates to a 399 // Verify that a popup that creates a view first and then navigates to a
386 // normal HTTP URL will be sent to the browser process, even though the 400 // normal HTTP URL will be sent to the browser process, even though the
387 // new view does not have any enabled_bindings_. 401 // new view does not have any enabled_bindings_.
388 WebKit::WebURLRequest popup_request(GURL("http://foo.com")); 402 WebKit::WebURLRequest popup_request(GURL("http://foo.com"));
389 WebKit::WebView* new_web_view = view()->createView( 403 WebKit::WebView* new_web_view = view()->createView(
390 GetMainFrame(), popup_request, WebKit::WebWindowFeatures(), "foo", 404 GetMainFrame(), popup_request, WebKit::WebWindowFeatures(), "foo",
391 WebKit::WebNavigationPolicyNewForegroundTab); 405 WebKit::WebNavigationPolicyNewForegroundTab);
392 RenderViewImpl* new_view = RenderViewImpl::FromWebView(new_web_view); 406 RenderViewImpl* new_view = RenderViewImpl::FromWebView(new_web_view);
393 policy = new_view->decidePolicyForNavigation( 407 policy = new_view->decidePolicyForNavigation(
394 new_web_view->mainFrame(), 408 new_web_view->mainFrame(),
409 &state,
395 popup_request, 410 popup_request,
396 WebKit::WebNavigationTypeLinkClicked, 411 WebKit::WebNavigationTypeLinkClicked,
397 WebKit::WebNavigationPolicyNewForegroundTab, 412 WebKit::WebNavigationPolicyNewForegroundTab,
398 false); 413 false);
399 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy); 414 EXPECT_EQ(WebKit::WebNavigationPolicyIgnore, policy);
400 415
401 // Clean up after the new view so we don't leak it. 416 // Clean up after the new view so we don't leak it.
402 new_view->Close(); 417 new_view->Close();
403 new_view->Release(); 418 new_view->Release();
404 } 419 }
(...skipping 976 matching lines...) Expand 10 before | Expand all | Expand 10 after
1381 } 1396 }
1382 1397
1383 // Crashy, http://crbug.com/53247. 1398 // Crashy, http://crbug.com/53247.
1384 TEST_F(RenderViewImplTest, DISABLED_DidFailProvisionalLoadWithErrorForError) { 1399 TEST_F(RenderViewImplTest, DISABLED_DidFailProvisionalLoadWithErrorForError) {
1385 GetMainFrame()->enableViewSourceMode(true); 1400 GetMainFrame()->enableViewSourceMode(true);
1386 WebURLError error; 1401 WebURLError error;
1387 error.domain = WebString::fromUTF8(net::kErrorDomain); 1402 error.domain = WebString::fromUTF8(net::kErrorDomain);
1388 error.reason = net::ERR_FILE_NOT_FOUND; 1403 error.reason = net::ERR_FILE_NOT_FOUND;
1389 error.unreachableURL = GURL("http://foo"); 1404 error.unreachableURL = GURL("http://foo");
1390 WebFrame* web_frame = GetMainFrame(); 1405 WebFrame* web_frame = GetMainFrame();
1406
1407 // Start a load that will reach provisional state synchronously,
1408 // but won't complete synchronously.
1409 ViewMsg_Navigate_Params params;
1410 params.page_id = -1;
1411 params.navigation_type = ViewMsg_Navigate_Type::NORMAL;
1412 params.url = GURL("data:text/html,test data");
1413 view()->OnNavigate(params);
1414
1391 // An error occurred. 1415 // An error occurred.
1392 view()->didFailProvisionalLoad(web_frame, error); 1416 view()->didFailProvisionalLoad(web_frame, error);
1393 // Frame should exit view-source mode. 1417 // Frame should exit view-source mode.
1394 EXPECT_FALSE(web_frame->isViewSourceModeEnabled()); 1418 EXPECT_FALSE(web_frame->isViewSourceModeEnabled());
1395 } 1419 }
1396 1420
1397 TEST_F(RenderViewImplTest, DidFailProvisionalLoadWithErrorForCancellation) { 1421 TEST_F(RenderViewImplTest, DidFailProvisionalLoadWithErrorForCancellation) {
1398 GetMainFrame()->enableViewSourceMode(true); 1422 GetMainFrame()->enableViewSourceMode(true);
1399 WebURLError error; 1423 WebURLError error;
1400 error.domain = WebString::fromUTF8(net::kErrorDomain); 1424 error.domain = WebString::fromUTF8(net::kErrorDomain);
1401 error.reason = net::ERR_ABORTED; 1425 error.reason = net::ERR_ABORTED;
1402 error.unreachableURL = GURL("http://foo"); 1426 error.unreachableURL = GURL("http://foo");
1403 WebFrame* web_frame = GetMainFrame(); 1427 WebFrame* web_frame = GetMainFrame();
1428
1429 // Start a load that will reach provisional state synchronously,
1430 // but won't complete synchronously.
1431 ViewMsg_Navigate_Params params;
1432 params.page_id = -1;
1433 params.navigation_type = ViewMsg_Navigate_Type::NORMAL;
1434 params.url = GURL("data:text/html,test data");
1435 view()->OnNavigate(params);
1436
1404 // A cancellation occurred. 1437 // A cancellation occurred.
1405 view()->didFailProvisionalLoad(web_frame, error); 1438 view()->didFailProvisionalLoad(web_frame, error);
1406 // Frame should stay in view-source mode. 1439 // Frame should stay in view-source mode.
1407 EXPECT_TRUE(web_frame->isViewSourceModeEnabled()); 1440 EXPECT_TRUE(web_frame->isViewSourceModeEnabled());
1408 } 1441 }
1409 1442
1410 // Regression test for http://crbug.com/41562 1443 // Regression test for http://crbug.com/41562
1411 TEST_F(RenderViewImplTest, UpdateTargetURLWithInvalidURL) { 1444 TEST_F(RenderViewImplTest, UpdateTargetURLWithInvalidURL) {
1412 const GURL invalid_gurl("http://"); 1445 const GURL invalid_gurl("http://");
1413 view()->setMouseOverURL(WebKit::WebURL(invalid_gurl)); 1446 view()->setMouseOverURL(WebKit::WebURL(invalid_gurl));
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
1809 1842
1810 // Copy the document content to std::wstring and compare with the 1843 // Copy the document content to std::wstring and compare with the
1811 // expected result. 1844 // expected result.
1812 const int kMaxOutputCharacters = 256; 1845 const int kMaxOutputCharacters = 256;
1813 std::wstring output = UTF16ToWideHack( 1846 std::wstring output = UTF16ToWideHack(
1814 GetMainFrame()->contentAsText(kMaxOutputCharacters)); 1847 GetMainFrame()->contentAsText(kMaxOutputCharacters));
1815 EXPECT_EQ(output, L"hello \n\nworld"); 1848 EXPECT_EQ(output, L"hello \n\nworld");
1816 } 1849 }
1817 1850
1818 } // namespace content 1851 } // namespace content
OLDNEW
« no previous file with comments | « content/public/renderer/navigation_state.h ('k') | content/renderer/render_view_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698