revert_remove_contentrendererclient_shouldfork.patch 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
  2. From: deepak1556 <[email protected]>
  3. Date: Wed, 23 Oct 2019 15:30:18 -0700
  4. Subject: Revert "Remove ContentRendererClient::ShouldFork."
  5. This reverts commit 6b068eb8ca4a3c7350bdafa22fc0cf0636ef8b74.
  6. diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
  7. index d37bd7451b4a73fc7b00e5cc1dfcb823c7a142fb..0e2800f3e5b0ee1b8e88921cbf3f18258ca51e7b 100644
  8. --- a/chrome/renderer/chrome_content_renderer_client.cc
  9. +++ b/chrome/renderer/chrome_content_renderer_client.cc
  10. @@ -1302,6 +1302,17 @@ bool ChromeContentRendererClient::ShouldFork(WebLocalFrame* frame,
  11. return true;
  12. #endif // BUILDFLAG(ENABLE_EXTENSIONS)
  13. + DCHECK(!frame->Parent());
  14. +
  15. + // If |url| matches one of the prerendered URLs, stop this navigation and try
  16. + // to swap in the prerendered page on the browser process. If the prerendered
  17. + // page no longer exists by the time the OpenURL IPC is handled, a normal
  18. + // navigation is attempted.
  19. + if (prerender_dispatcher_.get() &&
  20. + prerender_dispatcher_->IsPrerenderURL(url)) {
  21. + return true;
  22. + }
  23. +
  24. return false;
  25. }
  26. diff --git a/content/renderer/render_view_browsertest.cc b/content/renderer/render_view_browsertest.cc
  27. index 1659f93d83357337cb6e2cab668811cba3f14508..ef2aafde43347a6af188cada40c106dba8a19d31 100644
  28. --- a/content/renderer/render_view_browsertest.cc
  29. +++ b/content/renderer/render_view_browsertest.cc
  30. @@ -990,6 +990,73 @@ TEST_F(RenderViewImplTest, BeginNavigationForWebUI) {
  31. FrameHostMsg_OpenURL::ID));
  32. }
  33. +class AlwaysForkingRenderViewTest : public RenderViewImplTest {
  34. + public:
  35. + ContentRendererClient* CreateContentRendererClient() override {
  36. + return new TestContentRendererClient;
  37. + }
  38. +
  39. + private:
  40. + class TestContentRendererClient : public ContentRendererClient {
  41. + public:
  42. + bool ShouldFork(blink::WebLocalFrame* frame,
  43. + const GURL& url,
  44. + const std::string& http_method,
  45. + bool is_initial_navigation,
  46. + bool is_server_redirect) override {
  47. + return true;
  48. + }
  49. + };
  50. +};
  51. +
  52. +TEST_F(AlwaysForkingRenderViewTest, BeginNavigationDoesNotForkEmptyUrl) {
  53. + GURL example_url("http://example.com");
  54. + GURL empty_url("");
  55. +
  56. + LoadHTMLWithUrlOverride("<body></body", example_url.spec().c_str());
  57. + EXPECT_EQ(example_url,
  58. + GURL(frame()->GetWebFrame()->GetDocumentLoader()->GetUrl()));
  59. +
  60. + // Empty url should never fork.
  61. + blink::WebURLRequest request(empty_url);
  62. + request.SetMode(network::mojom::RequestMode::kNavigate);
  63. + request.SetRedirectMode(network::mojom::RedirectMode::kManual);
  64. + request.SetRequestContext(blink::mojom::RequestContextType::INTERNAL);
  65. + request.SetRequestorOrigin(blink::WebSecurityOrigin::Create(example_url));
  66. + auto navigation_info = std::make_unique<blink::WebNavigationInfo>();
  67. + navigation_info->url_request = request;
  68. + navigation_info->frame_type =
  69. + network::mojom::RequestContextFrameType::kTopLevel;
  70. + navigation_info->navigation_policy = blink::kWebNavigationPolicyCurrentTab;
  71. + frame()->BeginNavigation(std::move(navigation_info));
  72. + EXPECT_FALSE(render_thread_->sink().GetUniqueMessageMatching(
  73. + FrameHostMsg_OpenURL::ID));
  74. +}
  75. +
  76. +TEST_F(AlwaysForkingRenderViewTest, BeginNavigationDoesNotForkAboutBlank) {
  77. + GURL example_url("http://example.com");
  78. + GURL blank_url(url::kAboutBlankURL);
  79. +
  80. + LoadHTMLWithUrlOverride("<body></body", example_url.spec().c_str());
  81. + EXPECT_EQ(example_url,
  82. + GURL(frame()->GetWebFrame()->GetDocumentLoader()->GetUrl()));
  83. +
  84. + // about:blank should never fork.
  85. + blink::WebURLRequest request(blank_url);
  86. + request.SetMode(network::mojom::RequestMode::kNavigate);
  87. + request.SetRedirectMode(network::mojom::RedirectMode::kManual);
  88. + request.SetRequestContext(blink::mojom::RequestContextType::INTERNAL);
  89. + request.SetRequestorOrigin(blink::WebSecurityOrigin::Create(example_url));
  90. + auto navigation_info = std::make_unique<blink::WebNavigationInfo>();
  91. + navigation_info->url_request = request;
  92. + navigation_info->frame_type =
  93. + network::mojom::RequestContextFrameType::kTopLevel;
  94. + navigation_info->navigation_policy = blink::kWebNavigationPolicyCurrentTab;
  95. + frame()->BeginNavigation(std::move(navigation_info));
  96. + EXPECT_FALSE(render_thread_->sink().GetUniqueMessageMatching(
  97. + FrameHostMsg_OpenURL::ID));
  98. +}
  99. +
  100. // This test verifies that when device emulation is enabled, RenderFrameProxy
  101. // continues to receive the original ScreenInfo and not the emualted
  102. // ScreenInfo.