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

Unified Diff: ash/content/display/screen_orientation_delegate_chromeos_unittest.cc

Issue 723633003: Reland ScreenOrientationDelegate on ChromeOS (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix ChromeOS build error Created 6 years, 1 month 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
« no previous file with comments | « ash/content/display/screen_orientation_delegate_chromeos.cc ('k') | ash/shell.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/content/display/screen_orientation_delegate_chromeos_unittest.cc
diff --git a/ash/content/display/screen_orientation_delegate_chromeos_unittest.cc b/ash/content/display/screen_orientation_delegate_chromeos_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..28d9bda1f5074854de37f1165bdbcc132967df4a
--- /dev/null
+++ b/ash/content/display/screen_orientation_delegate_chromeos_unittest.cc
@@ -0,0 +1,194 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ash/ash_switches.h"
+#include "ash/content/display/screen_orientation_delegate_chromeos.h"
+#include "ash/display/display_info.h"
+#include "ash/display/display_manager.h"
+#include "ash/shell.h"
+#include "ash/test/ash_test_base.h"
+#include "ash/test/ash_test_helper.h"
+#include "ash/test/test_shell_delegate.h"
+#include "ash/wm/maximize_mode/maximize_mode_controller.h"
+#include "base/command_line.h"
+#include "base/memory/scoped_ptr.h"
+#include "content/public/browser/browser_context.h"
+#include "content/public/browser/web_contents.h"
+#include "content/public/test/test_browser_context.h"
+#include "third_party/WebKit/public/platform/WebScreenOrientationLockType.h"
+#include "ui/gfx/display.h"
+#include "ui/views/test/webview_test_helper.h"
+#include "ui/views/view.h"
+#include "ui/views/views_delegate.h"
+
+namespace ash {
+
+namespace {
+
+gfx::Display::Rotation Rotation() {
+ return Shell::GetInstance()
+ ->display_manager()
+ ->GetDisplayInfo(gfx::Display::InternalDisplayId())
+ .rotation();
+}
+
+bool RotationLocked() {
+ return Shell::GetInstance()->maximize_mode_controller()->rotation_locked();
+}
+
+} // namespace
+
+class ScreenOrientationDelegateTest : public test::AshTestBase {
+ public:
+ ScreenOrientationDelegateTest();
+ virtual ~ScreenOrientationDelegateTest();
+
+ ScreenOrientationDelegate* delegate() { return screen_orientation_delegate_; }
+
+ // Creates and initializes and empty content::WebContents that is backed by a
+ // content::BrowserContext and that has an aura::Window.
+ content::WebContents* CreateWebContents();
+
+ // Creates a secondary content::WebContents, with a separate
+ // content::BrowserContext.
+ content::WebContents* CreateSecondaryWebContents();
+
+ // test::AshTestBase:
+ void SetUp() override;
+
+ private:
+ ScreenOrientationDelegate* screen_orientation_delegate_;
+
+ // Optional content::BrowserContext used for two window tests.
+ scoped_ptr<content::BrowserContext> secondary_browser_context_;
+
+ // Setups underlying content layer so that content::WebContents can be
+ // generated.
+ scoped_ptr<views::WebViewTestHelper> webview_test_helper_;
+
+ DISALLOW_COPY_AND_ASSIGN(ScreenOrientationDelegateTest);
+};
+
+ScreenOrientationDelegateTest::ScreenOrientationDelegateTest() {
+ webview_test_helper_.reset(new views::WebViewTestHelper());
+}
+
+ScreenOrientationDelegateTest::~ScreenOrientationDelegateTest() {
+}
+
+content::WebContents* ScreenOrientationDelegateTest::CreateWebContents() {
+ return views::ViewsDelegate::views_delegate->CreateWebContents(
+ ash_test_helper()->test_shell_delegate()->GetActiveBrowserContext(),
+ nullptr);
+}
+
+content::WebContents*
+ScreenOrientationDelegateTest::CreateSecondaryWebContents() {
+ secondary_browser_context_.reset(new content::TestBrowserContext());
+ return views::ViewsDelegate::views_delegate->CreateWebContents(
+ secondary_browser_context_.get(), nullptr);
+}
+
+void ScreenOrientationDelegateTest::SetUp() {
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kAshUseFirstDisplayAsInternal);
+ base::CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kAshEnableTouchViewTesting);
+ test::AshTestBase::SetUp();
+ screen_orientation_delegate_ =
+ Shell::GetInstance()->screen_orientation_delegate();
+}
+
+// Tests that a content::WebContents can lock rotation.
+TEST_F(ScreenOrientationDelegateTest, LockOrientation) {
+ scoped_ptr<content::WebContents> content(CreateWebContents());
+ ASSERT_NE(nullptr, content->GetNativeView());
+ ASSERT_EQ(gfx::Display::ROTATE_0, Rotation());
+ ASSERT_FALSE(RotationLocked());
+
+ delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape);
+ EXPECT_EQ(gfx::Display::ROTATE_0, Rotation());
+ EXPECT_TRUE(RotationLocked());
+}
+
+// Tests that a content::WebContents can unlock rotation.
+TEST_F(ScreenOrientationDelegateTest, Unlock) {
+ scoped_ptr<content::WebContents> content(CreateWebContents());
+ ASSERT_NE(nullptr, content->GetNativeView());
+ ASSERT_EQ(gfx::Display::ROTATE_0, Rotation());
+ ASSERT_FALSE(RotationLocked());
+
+ delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape);
+ EXPECT_EQ(gfx::Display::ROTATE_0, Rotation());
+ EXPECT_TRUE(RotationLocked());
+
+ delegate()->Unlock(content.get());
+ EXPECT_FALSE(RotationLocked());
+}
+
+// Tests that a content::WebContents is able to change the orientation of the
+// display after having locked rotation.
+TEST_F(ScreenOrientationDelegateTest, OrientationChanges) {
+ scoped_ptr<content::WebContents> content(CreateWebContents());
+ ASSERT_NE(nullptr, content->GetNativeView());
+ ASSERT_EQ(gfx::Display::ROTATE_0, Rotation());
+ ASSERT_FALSE(RotationLocked());
+
+ delegate()->Lock(content.get(), blink::WebScreenOrientationLockPortrait);
+ EXPECT_EQ(gfx::Display::ROTATE_90, Rotation());
+ EXPECT_TRUE(RotationLocked());
+
+ delegate()->Lock(content.get(), blink::WebScreenOrientationLockLandscape);
+ EXPECT_EQ(gfx::Display::ROTATE_0, Rotation());
+}
+
+// Tests that a user initiated rotation lock cannot be unlocked by a
+// content::WebContents.
+TEST_F(ScreenOrientationDelegateTest, UserLockRejectsUnlock) {
+ Shell::GetInstance()->maximize_mode_controller()->SetRotationLocked(true);
+
+ scoped_ptr<content::WebContents> content(CreateWebContents());
+ delegate()->Unlock(content.get());
+ EXPECT_TRUE(RotationLocked());
+}
+
+// Tests that orientation can only be set by the first content::WebContents that
+// has set a rotation lock.
+TEST_F(ScreenOrientationDelegateTest, SecondContentCannotChangeOrientation) {
+ scoped_ptr<content::WebContents> content1(CreateWebContents());
+ scoped_ptr<content::WebContents> content2(CreateSecondaryWebContents());
+ ASSERT_NE(content1->GetNativeView(), content2->GetNativeView());
+
+ delegate()->Lock(content1.get(), blink::WebScreenOrientationLockLandscape);
+ delegate()->Lock(content2.get(), blink::WebScreenOrientationLockPortrait);
+ EXPECT_EQ(gfx::Display::ROTATE_0, Rotation());
+}
+
+// Tests that only the content::WebContents that set a rotation lock can perform
+// an unlock.
+TEST_F(ScreenOrientationDelegateTest, SecondContentCannotUnlock) {
+ scoped_ptr<content::WebContents> content1(CreateWebContents());
+ scoped_ptr<content::WebContents> content2(CreateSecondaryWebContents());
+ ASSERT_NE(content1->GetNativeView(), content2->GetNativeView());
+
+ delegate()->Lock(content1.get(), blink::WebScreenOrientationLockLandscape);
+ delegate()->Unlock(content2.get());
+ EXPECT_TRUE(RotationLocked());
+}
+
+// Tests that alternate content::WebContents can set a rotation lock after a
+// preexisting lock has been released.
+TEST_F(ScreenOrientationDelegateTest, AfterUnlockSecondContentCanLock) {
+ scoped_ptr<content::WebContents> content1(CreateWebContents());
+ scoped_ptr<content::WebContents> content2(CreateSecondaryWebContents());
+ ASSERT_NE(content1->GetNativeView(), content2->GetNativeView());
+
+ delegate()->Lock(content1.get(), blink::WebScreenOrientationLockLandscape);
+ delegate()->Unlock(content1.get());
+ delegate()->Lock(content2.get(), blink::WebScreenOrientationLockPortrait);
+ EXPECT_EQ(gfx::Display::ROTATE_90, Rotation());
+ EXPECT_TRUE(RotationLocked());
+}
+
+} // namespace ash
« no previous file with comments | « ash/content/display/screen_orientation_delegate_chromeos.cc ('k') | ash/shell.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698