summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-22 20:43:38 +0000
committerxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-22 20:43:38 +0000
commitd74fbb1e4375aaededa5be56a4658f9481bea37c (patch)
tree4b6db98e328e89ec19d71e3eeb8c045003b58199
parent3b83b3942935998ffdbeb9a30da1f13a2931504f (diff)
downloadchromium_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.cc50
-rw-r--r--chrome/browser/chromeos/extensions/file_manager/event_router.cc6
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;