diff options
author | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-22 20:43:38 +0000 |
---|---|---|
committer | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-22 20:43:38 +0000 |
commit | d74fbb1e4375aaededa5be56a4658f9481bea37c (patch) | |
tree | 4b6db98e328e89ec19d71e3eeb8c045003b58199 | |
parent | 3b83b3942935998ffdbeb9a30da1f13a2931504f (diff) | |
download | chromium_src-d74fbb1e4375aaededa5be56a4658f9481bea37c.zip chromium_src-d74fbb1e4375aaededa5be56a4658f9481bea37c.tar.gz chromium_src-d74fbb1e4375aaededa5be56a4658f9481bea37c.tar.bz2 |
Merge 245784 "kiosk: Tighten no browser window restriction."
> kiosk: Tighten no browser window restriction.
>
> - Do not pop up file manager on volume mount;
> - Watch browser open in kiosk session, log the opened url so that the code
> path could be fixed and close the just opened browser;
>
> BUG=335272,331378
>
> Review URL: https://codereview.chromium.org/135303011
TBR=xiyuan@chromium.org
Review URL: https://codereview.chromium.org/134833004
git-svn-id: svn://svn.chromium.org/chrome/branches/1750/src@246403 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/app_mode/app_session_lifetime.cc | 50 | ||||
-rw-r--r-- | chrome/browser/chromeos/extensions/file_manager/event_router.cc | 6 |
2 files changed, 54 insertions, 2 deletions
diff --git a/chrome/browser/chromeos/app_mode/app_session_lifetime.cc b/chrome/browser/chromeos/app_mode/app_session_lifetime.cc index c67a577..ccd2973 100644 --- a/chrome/browser/chromeos/app_mode/app_session_lifetime.cc +++ b/chrome/browser/chromeos/app_mode/app_session_lifetime.cc @@ -8,14 +8,22 @@ #include "apps/shell_window_registry.h" #include "ash/wm/window_state.h" #include "base/basictypes.h" +#include "base/bind.h" #include "base/lazy_instance.h" +#include "base/message_loop/message_loop.h" #include "base/prefs/pref_service.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_update_service.h" #include "chrome/browser/lifetime/application_lifetime.h" #include "chrome/browser/policy/browser_policy_connector.h" #include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_list.h" +#include "chrome/browser/ui/browser_list_observer.h" +#include "chrome/browser/ui/browser_window.h" +#include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/common/pref_names.h" +#include "content/public/browser/web_contents.h" using apps::ShellWindowRegistry; @@ -65,6 +73,45 @@ class AppWindowHandler : public ShellWindowRegistry::Observer { base::LazyInstance<AppWindowHandler> app_window_handler = LAZY_INSTANCE_INITIALIZER; +// BrowserWindowHandler monitors Browser object being created during +// a kiosk session, log info such as URL so that the code path could be +// fixed and closes the just opened browser window. +class BrowserWindowHandler : public chrome::BrowserListObserver { + public: + BrowserWindowHandler() { + BrowserList::AddObserver(this); + } + virtual ~BrowserWindowHandler() { + BrowserList::RemoveObserver(this); + } + + private: + void HandleBrowser(Browser* browser) { + content::WebContents* active_tab = + browser->tab_strip_model()->GetActiveWebContents(); + std::string url_string = + active_tab ? active_tab->GetURL().spec() : std::string(); + LOG(WARNING) << "Browser opened in kiosk session" + << ", url=" << url_string; + + browser->window()->Close(); + } + + // chrome::BrowserListObserver overrides: + virtual void OnBrowserAdded(Browser* browser) OVERRIDE { + base::MessageLoop::current()->PostTask( + FROM_HERE, + base::Bind(&BrowserWindowHandler::HandleBrowser, + base::Unretained(this), // LazyInstance, always valid + browser)); + } + + DISALLOW_COPY_AND_ASSIGN(BrowserWindowHandler); +}; + +base::LazyInstance<BrowserWindowHandler> browser_window_handler + = LAZY_INSTANCE_INITIALIZER; + } // namespace void InitAppSession(Profile* profile, const std::string& app_id) { @@ -72,6 +119,9 @@ void InitAppSession(Profile* profile, const std::string& app_id) { CHECK(app_window_handler == NULL); app_window_handler.Get().Init(profile); + CHECK(browser_window_handler == NULL); + browser_window_handler.Get(); + // Set the app_id for the current instance of KioskAppUpdateService. KioskAppUpdateService* update_service = KioskAppUpdateServiceFactory::GetForProfile(profile); diff --git a/chrome/browser/chromeos/extensions/file_manager/event_router.cc b/chrome/browser/chromeos/extensions/file_manager/event_router.cc index 857694c..ceb937c 100644 --- a/chrome/browser/chromeos/extensions/file_manager/event_router.cc +++ b/chrome/browser/chromeos/extensions/file_manager/event_router.cc @@ -12,6 +12,7 @@ #include "base/stl_util.h" #include "base/threading/sequenced_worker_pool.h" #include "base/values.h" +#include "chrome/browser/app_mode/app_mode_utils.h" #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/chromeos/drive/drive_integration_service.h" #include "chrome/browser/chromeos/drive/file_system_interface.h" @@ -627,10 +628,11 @@ void EventRouter::DispatchDirectoryChangeEvent( void EventRouter::ShowRemovableDeviceInFileManager( const base::FilePath& mount_path) { // Do not attempt to open File Manager while the login is in progress or - // the screen is locked and make sure the file manager is opened only for the - // active user. + // the screen is locked or running in kiosk app mode and make sure the file + // manager is opened only for the active user. if (chromeos::LoginDisplayHostImpl::default_host() || chromeos::ScreenLocker::default_screen_locker() || + chrome::IsRunningInForcedAppMode() || profile_ != ProfileManager::GetActiveUserProfile()) return; |