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

Unified Diff: content/browser/screen_orientation/screen_orientation_browsertest.cc

Issue 2832093003: Implement screen orientation for out-of-process iframes. (Closed)
Patch Set: fix dcheck Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/screen_orientation/screen_orientation_browsertest.cc
diff --git a/content/browser/screen_orientation/screen_orientation_browsertest.cc b/content/browser/screen_orientation/screen_orientation_browsertest.cc
index aeb3d4da1f6654d0ea1fbd6c8221780af4e5b8cc..adc6a370856727bfdaa698f4a6047b95a7c3cb47 100644
--- a/content/browser/screen_orientation/screen_orientation_browsertest.cc
+++ b/content/browser/screen_orientation/screen_orientation_browsertest.cc
@@ -7,7 +7,11 @@
#include "base/command_line.h"
#include "base/macros.h"
#include "build/build_config.h"
+#include "content/browser/frame_host/frame_tree.h"
+#include "content/browser/frame_host/render_frame_host_impl.h"
#include "content/browser/renderer_host/render_widget_host_impl.h"
+#include "content/browser/web_contents/web_contents_impl.h"
+#include "content/common/page_messages.h"
#include "content/common/view_messages.h"
#include "content/public/browser/render_widget_host.h"
#include "content/public/browser/render_widget_host_view.h"
@@ -20,7 +24,9 @@
#include "content/public/test/test_utils.h"
#include "content/shell/browser/shell.h"
#include "content/shell/common/shell_switches.h"
+#include "net/dns/mock_host_resolver.h"
#include "ui/compositor/compositor_switches.h"
+#include "ui/display/screen.h"
namespace content {
@@ -29,12 +35,16 @@ class ScreenOrientationBrowserTest : public ContentBrowserTest {
ScreenOrientationBrowserTest() {
}
+ WebContentsImpl* web_contents() {
+ return static_cast<WebContentsImpl*>(shell()->web_contents());
+ }
+
protected:
void SendFakeScreenOrientation(unsigned angle, const std::string& strType) {
- RenderWidgetHost* rwh = shell()->web_contents()->GetRenderWidgetHostView()
- ->GetRenderWidgetHost();
+ RenderWidgetHost* main_frame_rwh =
+ web_contents()->GetMainFrame()->GetRenderWidgetHost();
ScreenInfo screen_info;
- rwh->GetScreenInfo(&screen_info);
+ main_frame_rwh->GetScreenInfo(&screen_info);
screen_info.orientation_angle = angle;
ScreenOrientationValues type = SCREEN_ORIENTATION_VALUES_DEFAULT;
@@ -57,7 +67,25 @@ class ScreenOrientationBrowserTest : public ContentBrowserTest {
params.top_controls_height = 0.f;
params.browser_controls_shrink_blink_size = false;
params.is_fullscreen_granted = false;
- rwh->Send(new ViewMsg_Resize(rwh->GetRoutingID(), params));
+
+ std::set<RenderWidgetHost*> rwhs;
+ for (RenderFrameHost* rfh : web_contents()->GetAllFrames()) {
+ if (rfh == web_contents()->GetMainFrame())
+ continue;
+
+ rwhs.insert(static_cast<RenderFrameHostImpl*>(rfh)
+ ->frame_tree_node()
+ ->render_manager()
+ ->GetRenderWidgetHostView()
+ ->GetRenderWidgetHost());
+ }
+
+ main_frame_rwh->Send(
+ new ViewMsg_Resize(main_frame_rwh->GetRoutingID(), params));
+ web_contents()->GetFrameTree()->root()->render_manager()->SendPageMessage(
+ new PageMsg_UpdateScreenInfo(MSG_ROUTING_NONE, screen_info), nullptr);
+ for (auto* rwh : rwhs)
+ rwh->Send(new ViewMsg_Resize(rwh->GetRoutingID(), params));
nasko 2017/04/25 19:59:08 Do we actually iterate through RWHs in real code w
lfg 2017/04/25 20:08:18 Not exactly like this, the test is faking it. What
}
int GetOrientationAngle() {
@@ -99,6 +127,24 @@ class ScreenOrientationBrowserTest : public ContentBrowserTest {
DISALLOW_COPY_AND_ASSIGN(ScreenOrientationBrowserTest);
};
+class ScreenOrientationOOPIFBrowserTest : public ScreenOrientationBrowserTest {
+ public:
+ ScreenOrientationOOPIFBrowserTest() {}
+
+ void SetUpCommandLine(base::CommandLine* command_line) override {
+ IsolateAllSitesForTesting(command_line);
+ }
+
+ void SetUpOnMainThread() override {
+ host_resolver()->AddRule("*", "127.0.0.1");
+ SetupCrossSiteRedirector(embedded_test_server());
+ ASSERT_TRUE(embedded_test_server()->Start());
+ }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ScreenOrientationOOPIFBrowserTest);
+};
+
// This test doesn't work on MacOS X but the reason is mostly because it is not
// used Aura. It could be set as !defined(OS_MACOSX) but the rule below will
// actually support MacOS X if and when it switches to Aura.
@@ -245,4 +291,57 @@ IN_PROC_BROWSER_TEST_F(ScreenOrientationLockDisabledBrowserTest,
}
#endif // defined(OS_ANDROID)
+IN_PROC_BROWSER_TEST_F(ScreenOrientationOOPIFBrowserTest, ScreenOrientation) {
+ GURL main_url(embedded_test_server()->GetURL(
+ "a.com", "/cross_site_iframe_factory.html?a(b)"));
+ EXPECT_TRUE(NavigateToURL(shell(), main_url));
+#if USE_AURA || defined(OS_ANDROID)
+ WaitForResizeComplete(shell()->web_contents());
+#endif // USE_AURA || defined(OS_ANDROID)
+
+ std::string types[] = {"portrait-primary", "portrait-secondary",
+ "landscape-primary", "landscape-secondary"};
+
+ int angle = GetOrientationAngle();
+
+ FrameTreeNode* root = web_contents()->GetFrameTree()->root();
+ FrameTreeNode* child = root->child_at(0);
+ MainThreadFrameObserver root_observer(
+ root->current_frame_host()->GetRenderWidgetHost());
+ MainThreadFrameObserver child_observer(
+ child->current_frame_host()->GetRenderWidgetHost());
+ for (int i = 0; i < 4; ++i) {
+ angle = (angle + 90) % 360;
+ SendFakeScreenOrientation(angle, types[i]);
+
+ root_observer.Wait();
+ child_observer.Wait();
+
+ int orientation_angle;
+ std::string orientation_type;
+
+ EXPECT_TRUE(ExecuteScriptAndExtractInt(
+ root->current_frame_host(),
+ "window.domAutomationController.send(screen.orientation.angle)",
+ &orientation_angle));
+ EXPECT_EQ(angle, orientation_angle);
+ EXPECT_TRUE(ExecuteScriptAndExtractInt(
+ child->current_frame_host(),
+ "window.domAutomationController.send(screen.orientation.angle)",
+ &orientation_angle));
+ EXPECT_EQ(angle, orientation_angle);
+
+ EXPECT_TRUE(ExecuteScriptAndExtractString(
+ root->current_frame_host(),
+ "window.domAutomationController.send(screen.orientation.type)",
+ &orientation_type));
+ EXPECT_EQ(types[i], orientation_type);
+ EXPECT_TRUE(ExecuteScriptAndExtractString(
+ child->current_frame_host(),
+ "window.domAutomationController.send(screen.orientation.type)",
+ &orientation_type));
+ EXPECT_EQ(types[i], orientation_type);
+ }
+}
+
} // namespace content
« no previous file with comments | « no previous file | content/browser/web_contents/web_contents_impl.cc » ('j') | content/renderer/render_view_impl.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698