summaryrefslogtreecommitdiffstats
path: root/chrome/browser/chromeos
diff options
context:
space:
mode:
authordhg@chromium.org <dhg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-21 15:29:04 +0000
committerdhg@chromium.org <dhg@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-04-21 15:29:04 +0000
commit026ea7036f602ca051ef7c9c289ae6fee777adb5 (patch)
tree6734bc3b690c94cef6fce3dc6ed5048304158776 /chrome/browser/chromeos
parent29cf1677a06cbd93c8df8fedf54db8019f34208b (diff)
downloadchromium_src-026ea7036f602ca051ef7c9c289ae6fee777adb5.zip
chromium_src-026ea7036f602ca051ef7c9c289ae6fee777adb5.tar.gz
chromium_src-026ea7036f602ca051ef7c9c289ae6fee777adb5.tar.bz2
Changing the system to only close browser windows which currently are pointed to by the filebrowser.
BUG=chromium-os:2547 TEST=NONE Review URL: http://codereview.chromium.org/1690001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@45190 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos')
-rw-r--r--chrome/browser/chromeos/usb_mount_observer.cc44
-rw-r--r--chrome/browser/chromeos/usb_mount_observer.h1
2 files changed, 35 insertions, 10 deletions
diff --git a/chrome/browser/chromeos/usb_mount_observer.cc b/chrome/browser/chromeos/usb_mount_observer.cc
index 892b9bb..83b9266 100644
--- a/chrome/browser/chromeos/usb_mount_observer.cc
+++ b/chrome/browser/chromeos/usb_mount_observer.cc
@@ -5,9 +5,11 @@
#include "chrome/browser/chromeos/usb_mount_observer.h"
#include "chrome/browser/browser.h"
+#include "chrome/browser/browser_list.h"
#include "chrome/browser/browser_window.h"
#include "chrome/browser/dom_ui/filebrowse_ui.h"
#include "chrome/browser/tab_contents/tab_contents.h"
+#include "chrome/common/url_constants.h"
namespace chromeos {
@@ -25,7 +27,7 @@ void USBMountObserver::Observe(NotificationType type,
for (BrowserIterator i = browsers_.begin(); i != browsers_.end();
++i) {
if (Source<Browser>(source).ptr() == i->browser) {
- browsers_.erase(i);
+ i->browser = NULL;
registrar_.Remove(this,
NotificationType::BROWSER_CLOSED,
source);
@@ -52,10 +54,15 @@ void USBMountObserver::OpenFileBrowse(const std::string& url,
registrar_.Add(this,
NotificationType::BROWSER_CLOSED,
Source<Browser>(browser));
- BrowserWithPath new_browser;
- new_browser.browser = browser;
- new_browser.device_path = device_path;
- browsers_.push_back(new_browser);
+ BrowserIterator iter = FindBrowserForPath(device_path);
+ if (iter == browsers_.end()) {
+ BrowserWithPath new_browser;
+ new_browser.browser = browser;
+ new_browser.device_path = device_path;
+ browsers_.push_back(new_browser);
+ } else {
+ iter->browser = browser;
+ }
}
void USBMountObserver::MountChanged(chromeos::MountLibrary* obj,
@@ -82,7 +89,7 @@ void USBMountObserver::MountChanged(chromeos::MountLibrary* obj,
} else if (evt == chromeos::DISK_CHANGED) {
BrowserIterator iter = FindBrowserForPath(path);
LOG(INFO) << "Got changed mount:" << path;
- if (iter == browsers_.end()) {
+ if (iter == browsers_.end() && iter->browser) {
// We don't currently have this one, so it must have been
// mounted
const chromeos::MountLibrary::DiskVector& disks = obj->disks();
@@ -92,7 +99,7 @@ void USBMountObserver::MountChanged(chromeos::MountLibrary* obj,
// Doing second search to see if the current disk has already
// been popped up due to its parent device being plugged in.
iter = FindBrowserForPath(disks[i].system_path);
- if (iter != browsers_.end()) {
+ if (iter != browsers_.end() && iter->browser) {
std::string url = kFilebrowseURLHash;
url += disks[i].mount_path;
TabContents* tab = iter->browser->GetSelectedTabContents();
@@ -133,15 +140,32 @@ USBMountObserver::BrowserIterator USBMountObserver::FindBrowserForPath(
void USBMountObserver::RemoveBrowserFromVector(const std::string& path) {
BrowserIterator i = FindBrowserForPath(path);
+ std::string mount_path;
if (i != browsers_.end()) {
registrar_.Remove(this,
NotificationType::BROWSER_CLOSED,
Source<Browser>(i->browser));
- if (i->browser->window()) {
- i->browser->window()->Close();
- }
+ mount_path = i->mount_path;
browsers_.erase(i);
}
+ std::vector<Browser*> close_these;
+ for (BrowserList::const_iterator it = BrowserList::begin();
+ it != BrowserList::end(); ++it) {
+ if ((*it)->type() == Browser::TYPE_POPUP) {
+ const GURL& url =
+ (*it)->GetTabContentsAt((*it)->selected_index())->GetURL();
+ if (url.SchemeIs(chrome::kChromeUIScheme) &&
+ url.host() == chrome::kChromeUIFileBrowseHost &&
+ url.ref().find(mount_path) != std::string::npos) {
+ close_these.push_back(*it);
+ }
+ }
+ }
+ for (size_t x = 0; x < close_these.size(); x++) {
+ if (close_these[x]->window()) {
+ close_these[x]->window()->Close();
+ }
+ }
}
} // namespace chromeos
diff --git a/chrome/browser/chromeos/usb_mount_observer.h b/chrome/browser/chromeos/usb_mount_observer.h
index 7141de3..6b309a5 100644
--- a/chrome/browser/chromeos/usb_mount_observer.h
+++ b/chrome/browser/chromeos/usb_mount_observer.h
@@ -27,6 +27,7 @@ class USBMountObserver : public chromeos::MountLibrary::Observer,
struct BrowserWithPath {
Browser* browser;
std::string device_path;
+ std::string mount_path;
};
USBMountObserver() {}