| OLD | NEW | 
|    1 // Copyright 2015 The Chromium Authors. All rights reserved. |    1 // Copyright 2015 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 <stdint.h> |    5 #include <stdint.h> | 
|    6  |    6  | 
|    7 #include "base/command_line.h" |    7 #include "base/command_line.h" | 
|    8 #include "base/debug/leak_annotations.h" |    8 #include "base/debug/leak_annotations.h" | 
 |    9 #include "base/run_loop.h" | 
|    9 #include "base/strings/utf_string_conversions.h" |   10 #include "base/strings/utf_string_conversions.h" | 
|   10 #include "build/build_config.h" |   11 #include "build/build_config.h" | 
|   11 #include "content/child/web_url_loader_impl.h" |   12 #include "content/child/web_url_loader_impl.h" | 
|   12 #include "content/common/frame_messages.h" |   13 #include "content/common/frame_messages.h" | 
|   13 #include "content/common/frame_owner_properties.h" |   14 #include "content/common/frame_owner_properties.h" | 
|   14 #include "content/common/renderer.mojom.h" |   15 #include "content/common/renderer.mojom.h" | 
|   15 #include "content/common/view_messages.h" |   16 #include "content/common/view_messages.h" | 
|   16 #include "content/public/common/previews_state.h" |   17 #include "content/public/common/previews_state.h" | 
|   17 #include "content/public/renderer/document_state.h" |   18 #include "content/public/renderer/document_state.h" | 
|   18 #include "content/public/test/frame_load_waiter.h" |   19 #include "content/public/test/frame_load_waiter.h" | 
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  295 TEST_F(RenderFrameImplTest, SaveImageFromDataURL) { |  296 TEST_F(RenderFrameImplTest, SaveImageFromDataURL) { | 
|  296   const IPC::Message* msg1 = render_thread_->sink().GetFirstMessageMatching( |  297   const IPC::Message* msg1 = render_thread_->sink().GetFirstMessageMatching( | 
|  297       FrameHostMsg_SaveImageFromDataURL::ID); |  298       FrameHostMsg_SaveImageFromDataURL::ID); | 
|  298   EXPECT_FALSE(msg1); |  299   EXPECT_FALSE(msg1); | 
|  299   render_thread_->sink().ClearMessages(); |  300   render_thread_->sink().ClearMessages(); | 
|  300  |  301  | 
|  301   const std::string image_data_url = |  302   const std::string image_data_url = | 
|  302       "data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="; |  303       "data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="; | 
|  303  |  304  | 
|  304   frame()->SaveImageFromDataURL(WebString::FromUTF8(image_data_url)); |  305   frame()->SaveImageFromDataURL(WebString::FromUTF8(image_data_url)); | 
|  305   ProcessPendingMessages(); |  306   base::RunLoop().RunUntilIdle(); | 
|  306   const IPC::Message* msg2 = render_thread_->sink().GetFirstMessageMatching( |  307   const IPC::Message* msg2 = render_thread_->sink().GetFirstMessageMatching( | 
|  307       FrameHostMsg_SaveImageFromDataURL::ID); |  308       FrameHostMsg_SaveImageFromDataURL::ID); | 
|  308   EXPECT_TRUE(msg2); |  309   EXPECT_TRUE(msg2); | 
|  309  |  310  | 
|  310   FrameHostMsg_SaveImageFromDataURL::Param param1; |  311   FrameHostMsg_SaveImageFromDataURL::Param param1; | 
|  311   FrameHostMsg_SaveImageFromDataURL::Read(msg2, ¶m1); |  312   FrameHostMsg_SaveImageFromDataURL::Read(msg2, ¶m1); | 
|  312   EXPECT_EQ(std::get<2>(param1), image_data_url); |  313   EXPECT_EQ(std::get<2>(param1), image_data_url); | 
|  313  |  314  | 
|  314   ProcessPendingMessages(); |  315   base::RunLoop().RunUntilIdle(); | 
|  315   render_thread_->sink().ClearMessages(); |  316   render_thread_->sink().ClearMessages(); | 
|  316  |  317  | 
|  317   const std::string large_data_url(1024 * 1024 * 20 - 1, 'd'); |  318   const std::string large_data_url(1024 * 1024 * 20 - 1, 'd'); | 
|  318  |  319  | 
|  319   frame()->SaveImageFromDataURL(WebString::FromUTF8(large_data_url)); |  320   frame()->SaveImageFromDataURL(WebString::FromUTF8(large_data_url)); | 
|  320   ProcessPendingMessages(); |  321   base::RunLoop().RunUntilIdle(); | 
|  321   const IPC::Message* msg3 = render_thread_->sink().GetFirstMessageMatching( |  322   const IPC::Message* msg3 = render_thread_->sink().GetFirstMessageMatching( | 
|  322       FrameHostMsg_SaveImageFromDataURL::ID); |  323       FrameHostMsg_SaveImageFromDataURL::ID); | 
|  323   EXPECT_TRUE(msg3); |  324   EXPECT_TRUE(msg3); | 
|  324  |  325  | 
|  325   FrameHostMsg_SaveImageFromDataURL::Param param2; |  326   FrameHostMsg_SaveImageFromDataURL::Param param2; | 
|  326   FrameHostMsg_SaveImageFromDataURL::Read(msg3, ¶m2); |  327   FrameHostMsg_SaveImageFromDataURL::Read(msg3, ¶m2); | 
|  327   EXPECT_EQ(std::get<2>(param2), large_data_url); |  328   EXPECT_EQ(std::get<2>(param2), large_data_url); | 
|  328  |  329  | 
|  329   ProcessPendingMessages(); |  330   base::RunLoop().RunUntilIdle(); | 
|  330   render_thread_->sink().ClearMessages(); |  331   render_thread_->sink().ClearMessages(); | 
|  331  |  332  | 
|  332   const std::string exceeded_data_url(1024 * 1024 * 20 + 1, 'd'); |  333   const std::string exceeded_data_url(1024 * 1024 * 20 + 1, 'd'); | 
|  333  |  334  | 
|  334   frame()->SaveImageFromDataURL(WebString::FromUTF8(exceeded_data_url)); |  335   frame()->SaveImageFromDataURL(WebString::FromUTF8(exceeded_data_url)); | 
|  335   ProcessPendingMessages(); |  336   base::RunLoop().RunUntilIdle(); | 
|  336   const IPC::Message* msg4 = render_thread_->sink().GetFirstMessageMatching( |  337   const IPC::Message* msg4 = render_thread_->sink().GetFirstMessageMatching( | 
|  337       FrameHostMsg_SaveImageFromDataURL::ID); |  338       FrameHostMsg_SaveImageFromDataURL::ID); | 
|  338   EXPECT_FALSE(msg4); |  339   EXPECT_FALSE(msg4); | 
|  339 } |  340 } | 
|  340  |  341  | 
|  341 TEST_F(RenderFrameImplTest, ZoomLimit) { |  342 TEST_F(RenderFrameImplTest, ZoomLimit) { | 
|  342   const double kMinZoomLevel = ZoomFactorToZoomLevel(kMinimumZoomFactor); |  343   const double kMinZoomLevel = ZoomFactorToZoomLevel(kMinimumZoomFactor); | 
|  343   const double kMaxZoomLevel = ZoomFactorToZoomLevel(kMaximumZoomFactor); |  344   const double kMaxZoomLevel = ZoomFactorToZoomLevel(kMaximumZoomFactor); | 
|  344  |  345  | 
|  345   // Verifies navigation to a URL with preset zoom level indeed sets the level. |  346   // Verifies navigation to a URL with preset zoom level indeed sets the level. | 
|  346   // Regression test for http://crbug.com/139559, where the level was not |  347   // Regression test for http://crbug.com/139559, where the level was not | 
|  347   // properly set when it is out of the default zoom limits of WebView. |  348   // properly set when it is out of the default zoom limits of WebView. | 
|  348   CommonNavigationParams common_params; |  349   CommonNavigationParams common_params; | 
|  349   common_params.url = GURL("data:text/html,min_zoomlimit_test"); |  350   common_params.url = GURL("data:text/html,min_zoomlimit_test"); | 
|  350   common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT; |  351   common_params.navigation_type = FrameMsg_Navigate_Type::DIFFERENT_DOCUMENT; | 
|  351   GetMainRenderFrame()->SetHostZoomLevel(common_params.url, kMinZoomLevel); |  352   GetMainRenderFrame()->SetHostZoomLevel(common_params.url, kMinZoomLevel); | 
|  352   GetMainRenderFrame()->NavigateInternal( |  353   GetMainRenderFrame()->NavigateInternal( | 
|  353       common_params, StartNavigationParams(), RequestNavigationParams(), |  354       common_params, StartNavigationParams(), RequestNavigationParams(), | 
|  354       std::unique_ptr<StreamOverrideParameters>()); |  355       std::unique_ptr<StreamOverrideParameters>()); | 
|  355   ProcessPendingMessages(); |  356   base::RunLoop().RunUntilIdle(); | 
|  356   EXPECT_DOUBLE_EQ(kMinZoomLevel, view_->GetWebView()->ZoomLevel()); |  357   EXPECT_DOUBLE_EQ(kMinZoomLevel, view_->GetWebView()->ZoomLevel()); | 
|  357  |  358  | 
|  358   // It should work even when the zoom limit is temporarily changed in the page. |  359   // It should work even when the zoom limit is temporarily changed in the page. | 
|  359   view_->GetWebView()->ZoomLimitsChanged(ZoomFactorToZoomLevel(1.0), |  360   view_->GetWebView()->ZoomLimitsChanged(ZoomFactorToZoomLevel(1.0), | 
|  360                                          ZoomFactorToZoomLevel(1.0)); |  361                                          ZoomFactorToZoomLevel(1.0)); | 
|  361   common_params.url = GURL("data:text/html,max_zoomlimit_test"); |  362   common_params.url = GURL("data:text/html,max_zoomlimit_test"); | 
|  362   GetMainRenderFrame()->SetHostZoomLevel(common_params.url, kMaxZoomLevel); |  363   GetMainRenderFrame()->SetHostZoomLevel(common_params.url, kMaxZoomLevel); | 
|  363   GetMainRenderFrame()->NavigateInternal( |  364   GetMainRenderFrame()->NavigateInternal( | 
|  364       common_params, StartNavigationParams(), RequestNavigationParams(), |  365       common_params, StartNavigationParams(), RequestNavigationParams(), | 
|  365       std::unique_ptr<StreamOverrideParameters>()); |  366       std::unique_ptr<StreamOverrideParameters>()); | 
|  366   ProcessPendingMessages(); |  367   base::RunLoop().RunUntilIdle(); | 
|  367   EXPECT_DOUBLE_EQ(kMaxZoomLevel, view_->GetWebView()->ZoomLevel()); |  368   EXPECT_DOUBLE_EQ(kMaxZoomLevel, view_->GetWebView()->ZoomLevel()); | 
|  368 } |  369 } | 
|  369  |  370  | 
|  370 // Regression test for crbug.com/692557. It shouldn't crash if we inititate a |  371 // Regression test for crbug.com/692557. It shouldn't crash if we inititate a | 
|  371 // text finding, and then delete the frame immediately before the text finding |  372 // text finding, and then delete the frame immediately before the text finding | 
|  372 // returns any text match. |  373 // returns any text match. | 
|  373 TEST_F(RenderFrameImplTest, NoCrashWhenDeletingFrameDuringFind) { |  374 TEST_F(RenderFrameImplTest, NoCrashWhenDeletingFrameDuringFind) { | 
|  374   blink::WebFindOptions options; |  375   blink::WebFindOptions options; | 
|  375   options.force = true; |  376   options.force = true; | 
|  376   FrameMsg_Find find_message(0, 1, base::ASCIIToUTF16("foo"), options); |  377   FrameMsg_Find find_message(0, 1, base::ASCIIToUTF16("foo"), options); | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
|  393   // The host should receive a request for it sent to the frame. |  394   // The host should receive a request for it sent to the frame. | 
|  394   const IPC::Message* msg = render_thread_->sink().GetFirstMessageMatching( |  395   const IPC::Message* msg = render_thread_->sink().GetFirstMessageMatching( | 
|  395       FrameHostMsg_RequestOverlayRoutingToken::ID); |  396       FrameHostMsg_RequestOverlayRoutingToken::ID); | 
|  396   EXPECT_TRUE(msg); |  397   EXPECT_TRUE(msg); | 
|  397  |  398  | 
|  398   // Send a token. |  399   // Send a token. | 
|  399   base::UnguessableToken token = base::UnguessableToken::Create(); |  400   base::UnguessableToken token = base::UnguessableToken::Create(); | 
|  400   FrameMsg_SetOverlayRoutingToken token_message(0, token); |  401   FrameMsg_SetOverlayRoutingToken token_message(0, token); | 
|  401   frame()->OnMessageReceived(token_message); |  402   frame()->OnMessageReceived(token_message); | 
|  402  |  403  | 
|  403   ProcessPendingMessages(); |  404   base::RunLoop().RunUntilIdle(); | 
|  404   ASSERT_TRUE(overlay_routing_token_.has_value()); |  405   ASSERT_TRUE(overlay_routing_token_.has_value()); | 
|  405   ASSERT_EQ(overlay_routing_token_.value(), token); |  406   ASSERT_EQ(overlay_routing_token_.value(), token); | 
|  406 } |  407 } | 
|  407  |  408  | 
|  408 // Verify that RFI sends tokens if they're already available. |  409 // Verify that RFI sends tokens if they're already available. | 
|  409 TEST_F(RenderFrameImplTest, TestOverlayRoutingTokenSendsNow) { |  410 TEST_F(RenderFrameImplTest, TestOverlayRoutingTokenSendsNow) { | 
|  410   ASSERT_FALSE(overlay_routing_token_.has_value()); |  411   ASSERT_FALSE(overlay_routing_token_.has_value()); | 
|  411   base::UnguessableToken token = base::UnguessableToken::Create(); |  412   base::UnguessableToken token = base::UnguessableToken::Create(); | 
|  412   FrameMsg_SetOverlayRoutingToken token_message(0, token); |  413   FrameMsg_SetOverlayRoutingToken token_message(0, token); | 
|  413   frame()->OnMessageReceived(token_message); |  414   frame()->OnMessageReceived(token_message); | 
|  414  |  415  | 
|  415   // The frame now has a token.  We don't care if it sends the token before |  416   // The frame now has a token.  We don't care if it sends the token before | 
|  416   // returning or posts a message. |  417   // returning or posts a message. | 
|  417   ProcessPendingMessages(); |  418   base::RunLoop().RunUntilIdle(); | 
|  418   frame()->RequestOverlayRoutingToken( |  419   frame()->RequestOverlayRoutingToken( | 
|  419       base::Bind(&RenderFrameImplTest::ReceiveOverlayRoutingToken, |  420       base::Bind(&RenderFrameImplTest::ReceiveOverlayRoutingToken, | 
|  420                  base::Unretained(this))); |  421                  base::Unretained(this))); | 
|  421   ASSERT_TRUE(overlay_routing_token_.has_value()); |  422   ASSERT_TRUE(overlay_routing_token_.has_value()); | 
|  422   ASSERT_EQ(overlay_routing_token_.value(), token); |  423   ASSERT_EQ(overlay_routing_token_.value(), token); | 
|  423  |  424  | 
|  424   // Since the token already arrived, a request for it shouldn't be sent. |  425   // Since the token already arrived, a request for it shouldn't be sent. | 
|  425   const IPC::Message* msg = render_thread_->sink().GetFirstMessageMatching( |  426   const IPC::Message* msg = render_thread_->sink().GetFirstMessageMatching( | 
|  426       FrameHostMsg_RequestOverlayRoutingToken::ID); |  427       FrameHostMsg_RequestOverlayRoutingToken::ID); | 
|  427   EXPECT_FALSE(msg); |  428   EXPECT_FALSE(msg); | 
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  540         GURL(test.is_https ? "https://example.com" : "http://example.com")); |  541         GURL(test.is_https ? "https://example.com" : "http://example.com")); | 
|  541     request.SetPreviewsState(test.initial_request_previews_state); |  542     request.SetPreviewsState(test.initial_request_previews_state); | 
|  542  |  543  | 
|  543     EXPECT_EQ(test.expected_should_use_client_lo_fi_for_request, |  544     EXPECT_EQ(test.expected_should_use_client_lo_fi_for_request, | 
|  544               frame()->ShouldUseClientLoFiForRequest(request)) |  545               frame()->ShouldUseClientLoFiForRequest(request)) | 
|  545         << (&test - tests); |  546         << (&test - tests); | 
|  546   } |  547   } | 
|  547 } |  548 } | 
|  548  |  549  | 
|  549 }  // namespace content |  550 }  // namespace content | 
| OLD | NEW |