diff options
author | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-11 23:16:58 +0000 |
---|---|---|
committer | sky@chromium.org <sky@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-11 23:16:58 +0000 |
commit | 75a3230a00c5416d5cbdd1f1803d126ab507b512 (patch) | |
tree | d55526ede53341a5cd30125676bf453e3cc713ab /chrome/browser/chromeos/usb_mount_observer.cc | |
parent | 9bea0a88d3c89b66cc95c9e7eae57b13f57ce3d6 (diff) | |
download | chromium_src-75a3230a00c5416d5cbdd1f1803d126ab507b512.zip chromium_src-75a3230a00c5416d5cbdd1f1803d126ab507b512.tar.gz chromium_src-75a3230a00c5416d5cbdd1f1803d126ab507b512.tar.bz2 |
Lands http://codereview.chromium.org/505031 for dhg:
Browser should pop up status when usb is inserted.
BUG=NONE
TEST=NONE
Review URL: http://codereview.chromium.org/547009
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@35967 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/chromeos/usb_mount_observer.cc')
-rw-r--r-- | chrome/browser/chromeos/usb_mount_observer.cc | 76 |
1 files changed, 59 insertions, 17 deletions
diff --git a/chrome/browser/chromeos/usb_mount_observer.cc b/chrome/browser/chromeos/usb_mount_observer.cc index 177aaf1..d088334 100644 --- a/chrome/browser/chromeos/usb_mount_observer.cc +++ b/chrome/browser/chromeos/usb_mount_observer.cc @@ -2,12 +2,21 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +#include "chrome/browser/chromeos/usb_mount_observer.h" + #include "chrome/browser/browser.h" #include "chrome/browser/browser_window.h" -#include "chrome/browser/chromeos/usb_mount_observer.h" +#include "chrome/browser/tab_contents/tab_contents.h" namespace chromeos { +const char* kFilebrowseURLHash = "chrome://filebrowse#"; +const char* kFilebrowseURLScanning = "chrome://filebrowse#scanningdevice"; +const int kPopupLeft = 0; +const int kPopupTop = 0; +const int kPopupWidth = 250; +const int kPopupHeight = 300; + void USBMountObserver::Observe(NotificationType type, const NotificationSource& source, const NotificationDetails& details) { @@ -24,16 +33,39 @@ void USBMountObserver::Observe(NotificationType type, } } +void USBMountObserver::PopUpWindow(const std::string& url, + const std::string& device_path) { + Browser* browser = Browser::CreateForPopup(profile_); + browser->AddTabWithURL( + GURL(url), GURL(), PageTransition::LINK, + true, -1, false, NULL); + browser->window()->SetBounds(gfx::Rect(kPopupLeft, + kPopupTop, + kPopupWidth, + kPopupHeight)); + registrar_.Add(this, + NotificationType::BROWSER_CLOSED, + Source<Browser>(browser)); + browser->window()->Show(); + BrowserWithPath new_browser; + new_browser.browser = browser; + new_browser.device_path = device_path; + browsers_.push_back(new_browser); + +} + void USBMountObserver::MountChanged(chromeos::MountLibrary* obj, chromeos::MountEventType evt, const std::string& path) { if (evt == chromeos::DISK_ADDED) { // Return since disk added doesn't mean anything until // its mounted, which is a change event. + LOG(INFO) << "Got added mount:" << path; } else if (evt == chromeos::DISK_REMOVED) { RemoveBrowserFromVector(path); } else if (evt == chromeos::DISK_CHANGED) { BrowserIterator iter = FindBrowserForPath(path); + LOG(INFO) << "Got changed mount:" << path; if (iter == browsers_.end()) { // We don't currently have this one, so it must have been // mounted @@ -41,26 +73,34 @@ void USBMountObserver::MountChanged(chromeos::MountLibrary* obj, for (size_t i = 0; i < disks.size(); ++i) { if (disks[i].device_path == path) { if (!disks[i].mount_path.empty()) { - Browser* browser = Browser::CreateForPopup(profile_); - std::string url = "chrome://filebrowse#"; - url += disks[i].mount_path; - browser->AddTabWithURL( - GURL(url), GURL(), PageTransition::START_PAGE, - true, -1, false, NULL); - browser->window()->SetBounds(gfx::Rect(0, 0, 250, 300)); - registrar_.Add(this, - NotificationType::BROWSER_CLOSED, - Source<Browser>(browser)); - browser->window()->Show(); - BrowserWithPath new_browser; - new_browser.browser = browser; - new_browser.device_path = disks[i].device_path; - browsers_.push_back(new_browser); + // 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()) { + std::string url = kFilebrowseURLHash; + url += disks[i].mount_path; + TabContents* tab = iter->browser->GetSelectedTabContents(); + tab->OpenURL(GURL(url), GURL(), CURRENT_TAB, + PageTransition::LINK); + iter->device_path = path; + iter->browser->Reload(); + } else { + std::string url = kFilebrowseURLHash; + url += disks[i].mount_path; + PopUpWindow(url, disks[i].device_path); + } } return; } } } + } else if (evt == chromeos::DEVICE_ADDED) { + LOG(INFO) << "Got device added" << path; + // TODO(dhg): Refactor once mole api is ready. + std::string url = kFilebrowseURLScanning; + PopUpWindow(url, path); + } else if (evt == chromeos::DEVICE_SCANNED) { + LOG(INFO) << "Got device scanned:" << path; } } @@ -68,7 +108,9 @@ USBMountObserver::BrowserIterator USBMountObserver::FindBrowserForPath( const std::string& path) { for (BrowserIterator i = browsers_.begin();i != browsers_.end(); ++i) { - if (i->device_path == path) { + // Doing a substring match so that we find if this new one is a subdevice + // of another already inserted device. + if (path.find(i->device_path) != std::string::npos) { return i; } } |