diff options
author | caseq@google.com <caseq@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-02 12:04:16 +0000 |
---|---|---|
committer | caseq@google.com <caseq@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-05-02 12:04:16 +0000 |
commit | 5defceece89b1953c722c479b8b0505045e01733 (patch) | |
tree | 7dd4144cced43dc34fc3c30af459c5fe60f89a0a /ash/screensaver | |
parent | ed7bbb53170c3d54dfbd393c79fae6539fbab358 (diff) | |
download | chromium_src-5defceece89b1953c722c479b8b0505045e01733.zip chromium_src-5defceece89b1953c722c479b8b0505045e01733.tar.gz chromium_src-5defceece89b1953c722c479b8b0505045e01733.tar.bz2 |
Revert r134889, "Re-implement the screensaver to use WebView instead of ExtensionDialogHost."
The original change broke Win Aura and 3 Linux CrOs builders.
TBR=rkc@chromium.org,finnur@chromium.org
BUG=chromium-os:28211
TEST=tree goes green
Review URL: https://chromiumcodereview.appspot.com/10314008
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@134893 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/screensaver')
-rw-r--r-- | ash/screensaver/DEPS | 3 | ||||
-rw-r--r-- | ash/screensaver/screensaver_view.cc | 140 | ||||
-rw-r--r-- | ash/screensaver/screensaver_view.h | 86 | ||||
-rw-r--r-- | ash/screensaver/screensaver_view_unittest.cc | 93 |
4 files changed, 0 insertions, 322 deletions
diff --git a/ash/screensaver/DEPS b/ash/screensaver/DEPS deleted file mode 100644 index 1c35d9c..0000000 --- a/ash/screensaver/DEPS +++ /dev/null @@ -1,3 +0,0 @@ -include_rules = [ - "+content/public/browser", -] diff --git a/ash/screensaver/screensaver_view.cc b/ash/screensaver/screensaver_view.cc deleted file mode 100644 index 858ae9c..0000000 --- a/ash/screensaver/screensaver_view.cc +++ /dev/null @@ -1,140 +0,0 @@ -// Copyright (c) 2012 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/screensaver/screensaver_view.h" - -#include "ash/shell.h" -#include "ash/shell_delegate.h" -#include "base/bind.h" -#include "base/logging.h" -#include "content/public/browser/browser_context.h" -#include "content/public/browser/browser_thread.h" -#include "ui/gfx/screen.h" -#include "ui/aura/root_window.h" -#include "ui/views/layout/fill_layout.h" -#include "ui/views/controls/webview/webview.h" -#include "ui/views/widget/widget.h" - -using content::BrowserThread; - -namespace { - -ash::internal::ScreensaverView* g_instance = NULL; - -} // namespace - -namespace ash { - -void ShowScreensaver(const GURL& url) { - internal::ScreensaverView::ShowScreensaver(url); -} - -void CloseScreensaver() { - internal::ScreensaverView::CloseScreensaver(); -} - -namespace internal { - -// static -void ScreensaverView::ShowScreensaver(const GURL& url) { - if (!g_instance) { - g_instance = new ScreensaverView(url); - g_instance->Show(); - } -} - -// static -void ScreensaverView::CloseScreensaver() { - if (g_instance) { - g_instance->Close(); - g_instance = NULL; - } -} - -//////////////////////////////////////////////////////////////////////////////// -// ScreensaverView, views::WidgetDelegateView implementation. -views::View* ScreensaverView::GetContentsView() { - return this; -} - -//////////////////////////////////////////////////////////////////////////////// -// ScreensaverView, content::WebContentsObserver implementation. -void ScreensaverView::RenderViewGone( - base::TerminationStatus status) { - LOG(ERROR) << "Screensaver terminated with status " << status - << ", reloading."; - // Reload the screensaver url into the webcontents. - LoadScreensaver(); -} - -//////////////////////////////////////////////////////////////////////////////// -// ScreensaverView private methods. -ScreensaverView::ScreensaverView(const GURL& url) - : url_(url), - screensaver_webview_(NULL), - container_window_(NULL) { -} - -ScreensaverView::~ScreensaverView() { -} - -void ScreensaverView::Show() { - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - // Add the WebView to our view. - AddChildWebContents(); - // Show the window. - ShowWindow(); -} - -void ScreensaverView::Close() { - DCHECK(GetWidget()); - GetWidget()->Close(); -} - -void ScreensaverView::AddChildWebContents() { - content::BrowserContext* context = - Shell::GetInstance()->delegate()->GetCurrentBrowserContext(); - screensaver_webview_ = new views::WebView(context); - SetLayoutManager(new views::FillLayout); - AddChildView(screensaver_webview_); - - LoadScreensaver(); - content::WebContentsObserver::Observe( - screensaver_webview_->GetWebContents()); -} - -void ScreensaverView::LoadScreensaver() { - screensaver_webview_->GetWebContents()->GetController().LoadURL( - url_, - content::Referrer(), - content::PAGE_TRANSITION_START_PAGE, - std::string()); -} - -void ScreensaverView::ShowWindow() { - aura::RootWindow* root_window = ash::Shell::GetRootWindow(); - gfx::Rect screen_rect = - gfx::Screen::GetMonitorNearestWindow(root_window).bounds(); - - // We want to be the fullscreen topmost child of the root window. - // There should be nothing ever really that should show up on top of us. - container_window_ = new views::Widget(); - views::Widget::InitParams params( - views::Widget::InitParams::TYPE_WINDOW_FRAMELESS); - params.delegate = this; - params.parent = root_window; - container_window_->Init(params); - - container_window_->StackAtTop(); - container_window_->SetBounds(screen_rect); - container_window_->Show(); -} - -// static -ScreensaverView* ScreensaverView::GetInstance() { - return g_instance; -} - -} // namespace internal -} // namespace ash diff --git a/ash/screensaver/screensaver_view.h b/ash/screensaver/screensaver_view.h deleted file mode 100644 index 0835f9b..0000000 --- a/ash/screensaver/screensaver_view.h +++ /dev/null @@ -1,86 +0,0 @@ -// Copyright (c) 2012 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. - -#ifndef ASH_SCREENSAVER_SCREENSAVER_VIEW_H_ -#define ASH_SCREENSAVER_SCREENSAVER_VIEW_H_ -#pragma once - -#include "base/callback.h" -#include "content/public/browser/web_contents_observer.h" -#include "googleurl/src/gurl.h" -#include "ui/views/widget/widget_delegate.h" - -namespace content { -class BrowserContent; -} - -namespace views { -class WebView; -} - -namespace ash { - -namespace test { -class ScreensaverViewTest; -} - -void ShowScreensaver(const GURL& url); -void CloseScreensaver(); - -typedef - base::Callback<views::WebView*(content::BrowserContext*)> WebViewFactory; - -namespace internal { - -// Shows a URL as a screensaver. The screensaver window is fullscreen, -// always on top of every other window and will reload the URL if the -// renderer crashes for any reason. -class ScreensaverView : public views::WidgetDelegateView, - public content::WebContentsObserver { - public: - static void ShowScreensaver(const GURL& url); - static void CloseScreensaver(); - - private: - friend class test::ScreensaverViewTest; - - explicit ScreensaverView(const GURL& url); - virtual ~ScreensaverView(); - - // views::WidgetDelegate overrides. - virtual views::View* GetContentsView() OVERRIDE; - - // content::WebContentsObserver overrides. - virtual void RenderViewGone(base::TerminationStatus status) OVERRIDE; - - void Show(); - void Close(); - - // Creates and adds web contents to our view. - void AddChildWebContents(); - // Load the screensaver in the WebView's webcontent. If the webcontents - // don't exist, they'll be created by WebView. - void LoadScreensaver(); - // Creates and shows a frameless full screen window containing our view. - void ShowWindow(); - - // For testing purposes. - static ScreensaverView* GetInstance(); - - // URL to show in the screensaver. - GURL url_; - - // Host for the extension that implements this dialog. - views::WebView* screensaver_webview_; - - // Window that holds the screensaver webview. - views::Widget* container_window_; - - DISALLOW_COPY_AND_ASSIGN(ScreensaverView); -}; - -} // namespace internal -} // namespace ash - -#endif // ASH_SCREENSAVER_SCREENSAVER_VIEW_H_ diff --git a/ash/screensaver/screensaver_view_unittest.cc b/ash/screensaver/screensaver_view_unittest.cc deleted file mode 100644 index 47a19e2..0000000 --- a/ash/screensaver/screensaver_view_unittest.cc +++ /dev/null @@ -1,93 +0,0 @@ -// Copyright (c) 2012 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/screensaver/screensaver_view.h" - -#include "ash/test/ash_test_base.h" -#include "base/bind.h" -#include "content/public/browser/browser_context.h" -#include "ui/views/controls/webview/webview.h" -#include "ui/views/test/test_views_delegate.h" -#include "ui/views/test/webview_test_helper.h" - -namespace ash { -namespace test { - -class ScreensaverViewTest : public ash::test::AshTestBase { - public: - ScreensaverViewTest() { - url_ = GURL("http://www.google.com"); - views_delegate_.reset(new views::TestViewsDelegate); - webview_test_helper_.reset(new views::WebViewTestHelper(message_loop())); - } - - virtual ~ScreensaverViewTest() {} - - virtual void SetUp() OVERRIDE { - AshTestBase::SetUp(); - RunAllPendingInMessageLoop(); - } - - virtual void TearDown() OVERRIDE { - AshTestBase::TearDown(); - } - - void ExpectOpenScreensaver() { - internal::ScreensaverView* screensaver = - internal::ScreensaverView::GetInstance(); - EXPECT_TRUE(screensaver != NULL); - if (!screensaver) return; - - EXPECT_TRUE(screensaver->screensaver_webview_ != NULL); - if (!screensaver->screensaver_webview_) return; - - EXPECT_TRUE(screensaver->screensaver_webview_->web_contents() != NULL); - if (!screensaver->screensaver_webview_->web_contents()) return; - - EXPECT_EQ(screensaver->screensaver_webview_->web_contents()->GetURL(), - url_); - } - - void ExpectClosedScreensaver() { - EXPECT_TRUE(internal::ScreensaverView::GetInstance() == NULL); - } - - protected: - GURL url_; - - private: - scoped_ptr<views::TestViewsDelegate> views_delegate_; - scoped_ptr<views::WebViewTestHelper> webview_test_helper_; - - DISALLOW_COPY_AND_ASSIGN(ScreensaverViewTest); -}; - -TEST_F(ScreensaverViewTest, ShowScreensaverAndClose) { - ash::ShowScreensaver(url_); - RunAllPendingInMessageLoop(); - ExpectOpenScreensaver(); - - ash::CloseScreensaver(); - ExpectClosedScreensaver(); -} - -TEST_F(ScreensaverViewTest, OutOfOrderMultipleShowAndClose) { - ash::CloseScreensaver(); - ExpectClosedScreensaver(); - - ash::ShowScreensaver(url_); - ExpectOpenScreensaver(); - RunAllPendingInMessageLoop(); - ash::ShowScreensaver(url_); - ExpectOpenScreensaver(); - RunAllPendingInMessageLoop(); - - ash::CloseScreensaver(); - ExpectClosedScreensaver(); - ash::CloseScreensaver(); - ExpectClosedScreensaver(); -} - -} // namespace test -} // namespace ash |