diff options
-rw-r--r-- | chrome/browser/chromeos/chrome_browser_main_chromeos.cc | 6 | ||||
-rw-r--r-- | chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc | 105 | ||||
-rw-r--r-- | chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h | 43 | ||||
-rw-r--r-- | chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver_unittest.cc | 78 | ||||
-rw-r--r-- | chrome/browser/chromeos/ui/screensaver_extension_dialog.cc | 158 | ||||
-rw-r--r-- | chrome/browser/chromeos/ui/screensaver_extension_dialog.h | 65 | ||||
-rw-r--r-- | chrome/browser/ui/views/extensions/extension_dialog.cc | 76 | ||||
-rw-r--r-- | chrome/browser/ui/views/extensions/extension_dialog.h | 13 | ||||
-rw-r--r-- | chrome/chrome_browser.gypi | 4 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 1 | ||||
-rw-r--r-- | chrome/common/chrome_switches.cc | 6 | ||||
-rw-r--r-- | chrome/common/chrome_switches.h | 2 |
12 files changed, 518 insertions, 39 deletions
diff --git a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc index 347366f..95b234e 100644 --- a/chrome/browser/chromeos/chrome_browser_main_chromeos.cc +++ b/chrome/browser/chromeos/chrome_browser_main_chromeos.cc @@ -25,6 +25,7 @@ #include "chrome/browser/chromeos/imageburner/burn_manager.h" #include "chrome/browser/chromeos/input_method/input_method_manager.h" #include "chrome/browser/chromeos/input_method/xkeyboard.h" +#include "chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h" #include "chrome/browser/chromeos/login/authenticator.h" #include "chrome/browser/chromeos/login/login_utils.h" #include "chrome/browser/chromeos/login/ownership_service.h" @@ -197,7 +198,11 @@ void OptionallyRunChromeOSLoginManager(const CommandLine& parsed_command_line, size.SetSize(width, height); } } + browser::ShowLoginWizard(first_screen, size); + + if (parsed_command_line.HasSwitch(switches::kEnableKioskMode)) + chromeos::InitializeKioskModeScreensaver(); } else if (parsed_command_line.HasSwitch(switches::kLoginUser) && parsed_command_line.HasSwitch(switches::kLoginPassword)) { chromeos::BootTimesLoader::Get()->RecordLoginAttempted(); @@ -221,6 +226,7 @@ ChromeBrowserMainPartsChromeos::ChromeBrowserMainPartsChromeos( } ChromeBrowserMainPartsChromeos::~ChromeBrowserMainPartsChromeos() { + chromeos::ShutdownKioskModeScreensaver(); cryptohome::AsyncMethodCaller::Shutdown(); chromeos::imageburner::BurnManager::Shutdown(); chromeos::disks::DiskMountManager::Shutdown(); diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc new file mode 100644 index 0000000..bd943f4 --- /dev/null +++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc @@ -0,0 +1,105 @@ +// 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 "chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h" + +#include "base/lazy_instance.h" +#include "base/logging.h" +#include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" +#include "chrome/browser/chromeos/login/user_manager.h" +#include "chrome/browser/chromeos/ui/screensaver_extension_dialog.h" +#include "chrome/common/chrome_notification_types.h" +#include "content/public/browser/notification_service.h" + +namespace { + +// This (along with screensaver location) will change once we have the +// retail mode enterprise policy set up. +const int64 kScreensaverIdleTimeout = 60; + +} // namespace + +namespace chromeos { + +KioskModeScreensaver::KioskModeScreensaver() { + // We should NOT be created if already logged in. + CHECK(!chromeos::UserManager::Get()->user_is_logged_in()); + + registrar_.Add(this, chrome::NOTIFICATION_LOGIN_USER_CHANGED, + content::NotificationService::AllSources()); + + // We will register ourselves now and unregister if a user logs in. + chromeos::PowerManagerClient* power_manager = + chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); + if (!power_manager->HasObserver(this)) + power_manager->AddObserver(this); + + // Register for the next Idle for kScreensaverIdleTimeout event. + chromeos::DBusThreadManager::Get()->GetPowerManagerClient()-> + RequestIdleNotification(kScreensaverIdleTimeout * 1000); +} + +KioskModeScreensaver::~KioskModeScreensaver() { + chromeos::PowerManagerClient* power_manager = + chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); + if (power_manager->HasObserver(this)) + power_manager->RemoveObserver(this); +} + +// NotificationObserver overrides: +void KioskModeScreensaver::Observe( + int type, + const content::NotificationSource& source, + const content::NotificationDetails& details) { + DCHECK_EQ(type, chrome::NOTIFICATION_LOGIN_USER_CHANGED); + // User logged in, remove our observers, screensaver will be deactivated. + chromeos::PowerManagerClient* power_manager = + chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); + if (power_manager->HasObserver(this)) + power_manager->RemoveObserver(this); + + ShutdownKioskModeScreensaver(); +} + +void KioskModeScreensaver::IdleNotify(int64 threshold) { + // We're idle, next time we go active, we need to know so we can remove + // the logout dialog if it's still up. + chromeos::DBusThreadManager::Get()->GetPowerManagerClient()-> + RequestActiveNotification(); + + browser::ShowScreensaverDialog(); +} + +void KioskModeScreensaver::ActiveNotify() { + // Before anything else, close the logout dialog to prevent restart + browser::CloseScreensaverDialog(); + + // Now that we're active, register a request for notification for + // the next time we go idle for kScreensaverIdleTimeout seconds. + chromeos::DBusThreadManager::Get()->GetPowerManagerClient()-> + RequestIdleNotification(kScreensaverIdleTimeout * 1000); +} + +static KioskModeScreensaver* g_kiosk_mode_screensaver = NULL; + +void InitializeKioskModeScreensaver() { + if (g_kiosk_mode_screensaver) { + LOG(WARNING) << "Screensaver was already initialized"; + return; + } + + g_kiosk_mode_screensaver = new KioskModeScreensaver(); +} + +void ShutdownKioskModeScreensaver() { + if (g_kiosk_mode_screensaver) { + LOG(WARNING) << "Screensaver shutdown called when uninitialized."; + return; + } + + delete g_kiosk_mode_screensaver; + g_kiosk_mode_screensaver = NULL; +} + +} // namespace chromeos diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h new file mode 100644 index 0000000..9daeec0 --- /dev/null +++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h @@ -0,0 +1,43 @@ +// 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 CHROME_BROWSER_CHROMEOS_KIOSK_MODE_KIOSK_MODE_SCREENSAVER_H_ +#define CHROME_BROWSER_CHROMEOS_KIOSK_MODE_KIOSK_MODE_SCREENSAVER_H_ +#pragma once + +#include "base/basictypes.h" +#include "chrome/browser/chromeos/dbus/power_manager_client.h" +#include "content/public/browser/notification_observer.h" +#include "content/public/browser/notification_registrar.h" + +namespace chromeos { + +class KioskModeScreensaver : public PowerManagerClient::Observer, + public content::NotificationObserver { + public: + KioskModeScreensaver(); + virtual ~KioskModeScreensaver(); + + // NotificationObserver overrides: + virtual void Observe(int type, + const content::NotificationSource& source, + const content::NotificationDetails& details) OVERRIDE; + + // PowerManagerClient::Observer overrides: + virtual void IdleNotify(int64 threshold) OVERRIDE; + virtual void ActiveNotify() OVERRIDE; + + private: + friend class KioskModeScreensaverTest; + content::NotificationRegistrar registrar_; + + DISALLOW_COPY_AND_ASSIGN(KioskModeScreensaver); +}; + +void InitializeKioskModeScreensaver(); +void ShutdownKioskModeScreensaver(); + +} // namespace chromeos + +#endif // CHROME_BROWSER_CHROMEOS_KIOSK_MODE_KIOSK_MODE_SCREENSAVER_H_ diff --git a/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver_unittest.cc b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver_unittest.cc new file mode 100644 index 0000000..9198ad3 --- /dev/null +++ b/chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver_unittest.cc @@ -0,0 +1,78 @@ +// 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 "chrome/browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h" + +#include "base/bind.h" +#include "base/memory/scoped_ptr.h" +#include "base/message_loop.h" +#include "base/synchronization/waitable_event.h" +#include "chrome/browser/chromeos/dbus/dbus_thread_manager.h" +#include "chrome/browser/chromeos/login/user_manager.h" +#include "chrome/common/chrome_notification_types.h" +#include "content/public/browser/browser_thread.h" +#include "content/public/browser/notification_registrar.h" +#include "content/public/browser/notification_service.h" +#include "content/test/test_browser_thread.h" +#include "testing/gtest/include/gtest/gtest.h" + +using content::BrowserThread; + +namespace chromeos { + +class KioskModeScreensaverTest : public testing::Test { + public: + KioskModeScreensaverTest() + : ui_thread_(BrowserThread::UI, &message_loop_), + screensaver_(NULL) { + } + + virtual void SetUp() OVERRIDE { + DBusThreadManager::Initialize(); + screensaver_ = new KioskModeScreensaver(); + } + + virtual void TearDown() OVERRIDE { + delete screensaver_; + DBusThreadManager::Shutdown(); + } + + bool LoginUserObserverRegistered() { + return screensaver_->registrar_.IsRegistered( + screensaver_, + chrome::NOTIFICATION_LOGIN_USER_CHANGED, + content::NotificationService::AllSources()); + } + + bool PowerManagerObserverRegistered() { + chromeos::PowerManagerClient* power_manager = + chromeos::DBusThreadManager::Get()->GetPowerManagerClient(); + return power_manager->HasObserver(screensaver_); + } + + MessageLoopForUI message_loop_; + content::TestBrowserThread ui_thread_; + + KioskModeScreensaver* screensaver_; + content::NotificationRegistrar registrar_; +}; + +TEST_F(KioskModeScreensaverTest, CheckObservers) { + EXPECT_TRUE(LoginUserObserverRegistered()); + EXPECT_TRUE(PowerManagerObserverRegistered()); +} + +TEST_F(KioskModeScreensaverTest, CheckObserversAfterUserLogin) { + content::NotificationService::current()->Notify( + chrome::NOTIFICATION_LOGIN_USER_CHANGED, + content::Source<UserManager>(UserManager::Get()), + // Ideally this should be the user logged in, but since we won't really be + // checking for the current logged in user in our observer anyway, giving + // NoDetails here is fine. + content::NotificationService::NoDetails()); + + EXPECT_FALSE(PowerManagerObserverRegistered()); +} + +} // namespace chromeos diff --git a/chrome/browser/chromeos/ui/screensaver_extension_dialog.cc b/chrome/browser/chromeos/ui/screensaver_extension_dialog.cc new file mode 100644 index 0000000..8eb2879 --- /dev/null +++ b/chrome/browser/chromeos/ui/screensaver_extension_dialog.cc @@ -0,0 +1,158 @@ +// 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 "chrome/browser/chromeos/ui/screensaver_extension_dialog.h" + +#include "base/bind.h" +#include "base/logging.h" +#include "base/memory/ref_counted.h" +#include "chrome/browser/extensions/extension_service.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/sessions/restore_tab_helper.h" +#include "chrome/browser/ui/views/extensions/extension_dialog.h" +#include "chrome/common/chrome_switches.h" +#include "chrome/common/extensions/extension.h" +#include "chrome/common/extensions/extension_file_util.h" + +using content::BrowserThread; + +namespace { + +ScreensaverExtensionDialog* g_instance = NULL; + +} // namespace + +namespace browser { + +void ShowScreensaverDialog() { + ScreensaverExtensionDialog::ShowScreensaverDialog(); +} + +void CloseScreensaverDialog() { + ScreensaverExtensionDialog::CloseScreensaverDialog(); +} + +} // namespace browser + +// static +void ScreensaverExtensionDialog::ShowScreensaverDialog() { + if (!g_instance) + g_instance = new ScreensaverExtensionDialog(); + g_instance->Show(); +} + +// static +void ScreensaverExtensionDialog::CloseScreensaverDialog() { + if (g_instance) + g_instance->Close(); +} + +ScreensaverExtensionDialog::ScreensaverExtensionDialog() + : screensaver_extension_(NULL), + loading_extension_(false) { +} + +void ScreensaverExtensionDialog::LoadExtension() { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); + std::string error; + std::string extension_path = CommandLine::ForCurrentProcess()-> + GetSwitchValueASCII(switches::kKioskModeScreensaverPath); + + scoped_refptr<Extension> screensaver_extension = + extension_file_util::LoadExtension( + FilePath(extension_path), + Extension::COMPONENT, + Extension::NO_FLAGS, + &error); + + if (!screensaver_extension) { + LOG(ERROR) << "Could not load screensaver extension from: " << + extension_path; + return; + } + + BrowserThread::PostTask(BrowserThread::UI, + FROM_HERE, + base::Bind( + &ScreensaverExtensionDialog::SetExtensionAndShow, + base::Unretained(this), + screensaver_extension)); +} + +void ScreensaverExtensionDialog::SetExtensionAndShow( + scoped_refptr<Extension> extension) { + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + screensaver_extension_ = extension; + loading_extension_ = false; + Show(); +} + +void ScreensaverExtensionDialog::Show() { + // Whenever we're loading the extension, Show() will + // be called after the load finishes, so return. + if (loading_extension_) + return; + + if (!screensaver_extension_) { + loading_extension_ = true; + BrowserThread::PostTask(BrowserThread::FILE, + FROM_HERE, + base::Bind( + &ScreensaverExtensionDialog::LoadExtension, + base::Unretained(this))); + return; + } + + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + Profile* default_profile = ProfileManager::GetDefaultProfile(); + if (default_profile->GetExtensionService()->AddExtension( + screensaver_extension_)) { + extension_dialog_ = ExtensionDialog::ShowFullscreen( + screensaver_extension_->GetFullLaunchURL(), + default_profile, + string16(), + this); + } else { + LOG(ERROR) << "Couldn't add screensaver extension to profile."; + } +} + +void ScreensaverExtensionDialog::Close() { + if (extension_dialog_) { + extension_dialog_->Close(); + extension_dialog_ = NULL; + } +} + +ScreensaverExtensionDialog::~ScreensaverExtensionDialog() { + if (extension_dialog_) + extension_dialog_->ObserverDestroyed(); +} + +void ScreensaverExtensionDialog::ExtensionDialogClosing( + ExtensionDialog* dialog) { + // Release our reference to the dialog to allow it to close. + extension_dialog_ = NULL; +} + +void ScreensaverExtensionDialog::ExtensionTerminated( + ExtensionDialog* dialog) { + // This needs to be run 'slightly' delayed. When we get the extension + // terminated notification, the extension isn't fully unloaded yet. There + // is no good way to get around this. The correct solution will be to + // not need to reload the extension at all - but the current wiring in + // ExtensionViewsHost makes that not possible. + MessageLoop::current()->PostTask(FROM_HERE, + base::Bind(&ScreensaverExtensionDialog::ReloadAndShow, + base::Unretained(this))); + dialog->Close(); +} + +void ScreensaverExtensionDialog::ReloadAndShow() { + ProfileManager::GetDefaultProfile()->GetExtensionService()->ReloadExtension( + screensaver_extension_->id()); + + Show(); +} diff --git a/chrome/browser/chromeos/ui/screensaver_extension_dialog.h b/chrome/browser/chromeos/ui/screensaver_extension_dialog.h new file mode 100644 index 0000000..d11dede --- /dev/null +++ b/chrome/browser/chromeos/ui/screensaver_extension_dialog.h @@ -0,0 +1,65 @@ +// 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 CHROME_BROWSER_CHROMEOS_UI_SCREENSAVER_EXTENSION_DIALOG_H_ +#define CHROME_BROWSER_CHROMEOS_UI_SCREENSAVER_EXTENSION_DIALOG_H_ +#pragma once + +#include "base/memory/ref_counted.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/views/extensions/extension_dialog_observer.h" + +class Extension; +class ExtensionDialog; + +namespace browser { + +void ShowScreensaverDialog(); +void CloseScreensaverDialog(); + +} // namespace browser + +// Shows or hides the screensaver extension in fullscreen mode on +// top of all other windows. +class ScreensaverExtensionDialog + : public ExtensionDialogObserver { + public: + static void ShowScreensaverDialog(); + static void CloseScreensaverDialog(); + + // ExtensionDialog::Observer implementation. + virtual void ExtensionDialogClosing(ExtensionDialog* dialog) OVERRIDE; + virtual void ExtensionTerminated(ExtensionDialog* dialog) OVERRIDE; + + protected: + // ScreensaverDialog implementation. + virtual void Show() OVERRIDE; + virtual void Close() OVERRIDE; + + private: + friend class ScreensaverExtensionDialogBrowserTest; + friend class ScreensaverExtensionDialogTest; + + ScreensaverExtensionDialog(); + virtual ~ScreensaverExtensionDialog(); + + // Load the screensaver extension. + void LoadExtension(); + // Callback to set the extension and show the dialog. + // Called from LoadExtension. + void SetExtensionAndShow(scoped_refptr<Extension> extension); + // Reload the screensaver extension and show another screensaver dialog. + void ReloadAndShow(); + + scoped_refptr<Extension> screensaver_extension_; + // Host for the extension that implements this dialog. + scoped_refptr<ExtensionDialog> extension_dialog_; + + // Set while we're loading an extension; only touched from the UI thread. + bool loading_extension_; + + DISALLOW_COPY_AND_ASSIGN(ScreensaverExtensionDialog); +}; + +#endif // CHROME_BROWSER_CHROMEOS_UI_SCREENSAVER_EXTENSION_DIALOG_H_ diff --git a/chrome/browser/ui/views/extensions/extension_dialog.cc b/chrome/browser/ui/views/extensions/extension_dialog.cc index 35f8220..9f0ec8f 100644 --- a/chrome/browser/ui/views/extensions/extension_dialog.cc +++ b/chrome/browser/ui/views/extensions/extension_dialog.cc @@ -19,12 +19,13 @@ #include "content/public/browser/render_widget_host_view.h" #include "content/public/browser/web_contents.h" #include "googleurl/src/gurl.h" +#include "ui/gfx/screen.h" #include "ui/views/background.h" #include "ui/views/widget/widget.h" #if defined(USE_AURA) +#include "ash/shell.h" #include "ui/aura/root_window.h" -#include "ui/aura/window.h" #endif using content::WebContents; @@ -58,19 +59,27 @@ ExtensionDialog* ExtensionDialog::Show( int height, const string16& title, ExtensionDialogObserver* observer) { - return ExtensionDialog::ShowInternal(url, browser, web_contents, width, - height, false, title, observer); + ExtensionHost* host = CreateExtensionHost(url, browser, NULL); + if (!host) + return NULL; + host->set_associated_web_contents(web_contents); + + return ExtensionDialog::ShowInternal(url, browser, host, width, height, + false, title, observer); } #if defined(USE_AURA) // static ExtensionDialog* ExtensionDialog::ShowFullscreen( const GURL& url, - Browser* browser, - WebContents* web_contents, + Profile* profile, const string16& title, ExtensionDialogObserver* observer) { - return ExtensionDialog::ShowInternal(url, browser, web_contents, 0, 0, + ExtensionHost* host = CreateExtensionHost(url, NULL, profile); + if (!host) + return NULL; + + return ExtensionDialog::ShowInternal(url, NULL, host, 0, 0, true, title, observer); } #endif @@ -78,22 +87,18 @@ ExtensionDialog* ExtensionDialog::ShowFullscreen( // static ExtensionDialog* ExtensionDialog::ShowInternal(const GURL& url, Browser* browser, - content::WebContents* web_contents, + ExtensionHost* host, int width, int height, bool fullscreen, const string16& title, ExtensionDialogObserver* observer) { - CHECK(browser); - ExtensionHost* host = CreateExtensionHost(url, browser); - if (!host) - return NULL; - host->set_associated_web_contents(web_contents); - + CHECK(fullscreen || browser); ExtensionDialog* dialog = new ExtensionDialog(host, observer); dialog->set_title(title); + if (fullscreen) - dialog->InitWindowFullscreen(browser); + dialog->InitWindowFullscreen(); else dialog->InitWindow(browser, width, height); @@ -110,36 +115,41 @@ ExtensionDialog* ExtensionDialog::ShowInternal(const GURL& url, // static ExtensionHost* ExtensionDialog::CreateExtensionHost(const GURL& url, - Browser* browser) { - ExtensionProcessManager* manager = - browser->profile()->GetExtensionProcessManager(); + Browser* browser, + Profile* profile) { + // Prefer picking the extension manager from the profile if given. + ExtensionProcessManager* manager = NULL; + if (profile) + manager = profile->GetExtensionProcessManager(); + else + manager = browser->profile()->GetExtensionProcessManager(); + DCHECK(manager); if (!manager) return NULL; - return manager->CreateDialogHost(url, browser); + if (browser) + return manager->CreateDialogHost(url, browser); + else + return manager->CreatePopupHost(url, NULL); } #if defined(USE_AURA) -void ExtensionDialog::InitWindowFullscreen(Browser* browser) { - gfx::NativeWindow parent = browser->window()->GetNativeHandle(); - - // Create the window as a child of the root window. - window_ = browser::CreateFramelessViewsWindow( - parent->GetRootWindow(), this); - // Make sure we're always on top by putting ourselves at the top - // of the z-order of the child windows of the root window. - parent->GetRootWindow()->StackChildAtTop(window_->GetNativeWindow()); - - int width = parent->GetRootWindow()->GetHostSize().width(); - int height = parent->GetRootWindow()->GetHostSize().height(); - window_->SetBounds(gfx::Rect(0, 0, width, height)); - +void ExtensionDialog::InitWindowFullscreen() { + aura::RootWindow* root_window = ash::Shell::GetRootWindow(); + gfx::Rect screen_rect = + gfx::Screen::GetMonitorAreaNearestWindow(root_window); + + // We want to be the fullscreen topmost child of the root window. + window_ = browser::CreateFramelessViewsWindow(root_window, this); + window_->StackAtTop(); + window_->SetBounds(screen_rect); window_->Show(); + // TODO(jamescook): Remove redundant call to Activate()? window_->Activate(); } #else -void ExtensionDialog::InitWindowFullscreen(Browser* browser) { +void ExtensionDialog::InitWindowFullscreen() { NOTIMPLEMENTED(); } #endif diff --git a/chrome/browser/ui/views/extensions/extension_dialog.h b/chrome/browser/ui/views/extensions/extension_dialog.h index 65b65f0..b105ef0 100644 --- a/chrome/browser/ui/views/extensions/extension_dialog.h +++ b/chrome/browser/ui/views/extensions/extension_dialog.h @@ -15,6 +15,7 @@ class Browser; class ExtensionDialogObserver; class ExtensionHost; class GURL; +class Profile; namespace content { class WebContents; @@ -43,11 +44,10 @@ class ExtensionDialog : public views::WidgetDelegate, #if defined(USE_AURA) // Create and show a fullscreen dialog with |url|. - // |browser| is the browser to which the pop-up will be attached. + // |profile| is the profile that the extension is registered with. // |web_contents| is the tab that spawned the dialog. static ExtensionDialog* ShowFullscreen(const GURL& url, - Browser* browser, - content::WebContents* web_contents, + Profile* profile, const string16& title, ExtensionDialogObserver* observer); #endif @@ -86,7 +86,7 @@ class ExtensionDialog : public views::WidgetDelegate, static ExtensionDialog* ShowInternal(const GURL& url, Browser* browser, - content::WebContents* web_contents, + ExtensionHost* host, int width, int height, bool fullscreen, @@ -94,10 +94,11 @@ class ExtensionDialog : public views::WidgetDelegate, ExtensionDialogObserver* observer); static ExtensionHost* CreateExtensionHost(const GURL& url, - Browser* browser); + Browser* browser, + Profile* profile); void InitWindow(Browser* browser, int width, int height); - void InitWindowFullscreen(Browser* browser); + void InitWindowFullscreen(); // Window that holds the extension host view. views::Widget* window_; diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 9340de5..dd66b99 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -553,6 +553,8 @@ 'browser/chromeos/input_method/xkeyboard.cc', 'browser/chromeos/input_method/xkeyboard.h', 'browser/chromeos/input_method/xkeyboard_data.h', + 'browser/chromeos/kiosk_mode/kiosk_mode_screensaver.cc', + 'browser/chromeos/kiosk_mode/kiosk_mode_screensaver.h', 'browser/chromeos/language_preferences.cc', 'browser/chromeos/language_preferences.h', 'browser/chromeos/legacy_window_manager/initial_browser_window_observer.cc', @@ -848,6 +850,8 @@ 'browser/chromeos/tab_closeable_state_watcher.h', 'browser/chromeos/ui/brightness_bubble.cc', 'browser/chromeos/ui/brightness_bubble.h', + 'browser/chromeos/ui/screensaver_extension_dialog.cc', + 'browser/chromeos/ui/screensaver_extension_dialog.h', 'browser/chromeos/ui/setting_level_bubble.cc', 'browser/chromeos/ui/setting_level_bubble.h', 'browser/chromeos/ui/setting_level_bubble_view.cc', diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 2665410..2fe04e3 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1356,6 +1356,7 @@ 'browser/chromeos/input_method/input_method_util_unittest.cc', 'browser/chromeos/input_method/virtual_keyboard_selector_unittest.cc', 'browser/chromeos/input_method/xkeyboard_unittest.cc', + 'browser/chromeos/kiosk_mode/kiosk_mode_screensaver_unittest.cc', 'browser/chromeos/language_preferences_unittest.cc', 'browser/chromeos/login/authenticator_unittest.cc', 'browser/chromeos/login/cookie_fetcher_unittest.cc', diff --git a/chrome/common/chrome_switches.cc b/chrome/common/chrome_switches.cc index 3c409071..7576779 100644 --- a/chrome/common/chrome_switches.cc +++ b/chrome/common/chrome_switches.cc @@ -1170,6 +1170,9 @@ const char kEnableDevicePolicy[] = "enable-device-policy"; // Viewer. const char kEnableGView[] = "enable-gview"; +// Enable Kiosk mode for ChromeOS +const char kEnableKioskMode[] = "enable-kiosk-mode"; + // Enables mobile setup in a dialog. const char kEnableMobileSetupDialog[] = "enable-mobile-dialog"; @@ -1184,6 +1187,9 @@ const char kEnableSensors[] = "enable-sensors"; // default. const char kEnableStaticIPConfig[] = "enable-static-ip-config"; +// Path for the screensaver used in Kiosk mode +const char kKioskModeScreensaverPath[] = "kiosk-mode-screensaver-path"; + // Enables Chrome-as-a-login-manager behavior. const char kLoginManager[] = "login-manager"; diff --git a/chrome/common/chrome_switches.h b/chrome/common/chrome_switches.h index 877d7db..9fda124 100644 --- a/chrome/common/chrome_switches.h +++ b/chrome/common/chrome_switches.h @@ -321,10 +321,12 @@ extern const char kSkipOAuthLogin[]; extern const char kEnableBluetooth[]; extern const char kEnableDevicePolicy[]; extern const char kEnableGView[]; +extern const char kEnableKioskMode[]; extern const char kEnableMobileSetupDialog[]; extern const char kEnableONCPolicy[]; extern const char kEnableSensors[]; extern const char kEnableStaticIPConfig[]; +extern const char kKioskModeScreensaverPath[]; extern const char kLoginManager[]; // TODO(avayvod): Remove this flag when it's unnecessary for testing // purposes. |