• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef ASH_SCREENSAVER_SCREENSAVER_VIEW_H_
6 #define ASH_SCREENSAVER_SCREENSAVER_VIEW_H_
7 
8 #include "ash/content_support/ash_with_content_export.h"
9 #include "base/callback.h"
10 #include "content/public/browser/web_contents_observer.h"
11 #include "ui/views/widget/widget_delegate.h"
12 #include "url/gurl.h"
13 
14 namespace content {
15 class BrowserContent;
16 }
17 
18 namespace views {
19 class WebView;
20 }
21 
22 namespace ash {
23 
24 namespace test {
25 class ScreensaverViewTest;
26 }
27 
28 ASH_WITH_CONTENT_EXPORT void ShowScreensaver(const GURL& url);
29 ASH_WITH_CONTENT_EXPORT void CloseScreensaver();
30 ASH_WITH_CONTENT_EXPORT bool IsScreensaverShown();
31 
32 typedef
33     base::Callback<views::WebView*(content::BrowserContext*)> WebViewFactory;
34 
35 // Shows a URL as a screensaver. The screensaver window is fullscreen,
36 // always on top of every other window and will reload the URL if the
37 // renderer crashes for any reason.
38 class ScreensaverView : public views::WidgetDelegateView,
39                         public content::WebContentsObserver {
40  public:
41   static void ShowScreensaver(const GURL& url);
42   static void CloseScreensaver();
43 
44   static bool IsScreensaverShown();
45 
46  private:
47   friend class test::ScreensaverViewTest;
48 
49   explicit ScreensaverView(const GURL& url);
50   virtual ~ScreensaverView();
51 
52   // views::WidgetDelegate overrides.
53   virtual views::View* GetContentsView() OVERRIDE;
54 
55   // content::WebContentsObserver overrides.
56   virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
57 
58   void Show();
59   void Close();
60 
61   // Creates and adds web contents to our view.
62   void AddChildWebContents();
63   // Load the screensaver in the WebView's webcontent. If the webcontents
64   // don't exist, they'll be created by WebView.
65   void LoadScreensaver();
66   // Creates and shows a frameless full screen window containing our view.
67   void ShowWindow();
68 
69   // For testing purposes.
70   static ASH_WITH_CONTENT_EXPORT ScreensaverView* GetInstance();
71   ASH_WITH_CONTENT_EXPORT bool IsScreensaverShowingURL(const GURL& url);
72 
73   // URL to show in the screensaver.
74   GURL url_;
75 
76   // Number of times the screensaver has been terminated (usually this will be
77   // synonymous with the number of times it has crashed).
78   int termination_count_;
79 
80   // Host for the extension that implements this dialog.
81   views::WebView* screensaver_webview_;
82 
83   // Window that holds the screensaver webview.
84   views::Widget* container_window_;
85 
86   DISALLOW_COPY_AND_ASSIGN(ScreensaverView);
87 };
88 
89 }  // namespace ash
90 
91 #endif  // ASH_SCREENSAVER_SCREENSAVER_VIEW_H_
92