Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1053)

Unified Diff: chrome/browser/intents/device_attached_intent_source.cc

Issue 11828026: Remove DeviceAttachedIntentSource. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/intents/device_attached_intent_source.h ('k') | chrome/browser/ui/browser.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/intents/device_attached_intent_source.cc
diff --git a/chrome/browser/intents/device_attached_intent_source.cc b/chrome/browser/intents/device_attached_intent_source.cc
deleted file mode 100644
index 0f0244acfda3afd7f12221032ddf3727728bff7f..0000000000000000000000000000000000000000
--- a/chrome/browser/intents/device_attached_intent_source.cc
+++ /dev/null
@@ -1,156 +0,0 @@
-// 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/intents/device_attached_intent_source.h"
-
-#include <vector>
-
-#include "base/bind.h"
-#include "base/file_path.h"
-#include "base/string16.h"
-#include "base/memory/ref_counted.h"
-#include "base/utf_string_conversions.h"
-#include "chrome/browser/intents/web_intents_registry.h"
-#include "chrome/browser/intents/web_intents_registry_factory.h"
-#include "chrome/browser/profiles/profile.h"
-#include "chrome/browser/system_monitor/media_storage_util.h"
-#include "chrome/browser/ui/browser.h"
-#include "chrome/browser/ui/browser_window.h"
-#include "content/public/browser/web_intents_dispatcher.h"
-#include "content/public/browser/web_contents_delegate.h"
-#include "webkit/fileapi/file_system_types.h"
-#include "webkit/fileapi/isolated_context.h"
-#include "webkit/glue/web_intent_data.h"
-#include "webkit/glue/web_intent_service_data.h"
-
-using base::SystemMonitor;
-using chrome::MediaStorageUtil;
-using content::WebContentsDelegate;
-using webkit_glue::WebIntentServiceData;
-
-namespace {
-
-// Specifies device attached web intent kAction.
-const char kAction[] = "chrome-extension://attach";
-
-// Specifies device attached web intent type.
-const char kIntentType[] = "chrome-extension://filesystem";
-
-// Dispatch intent only when there is a list of registered services. This is a
-// helper class that stores the attached media device information and decides
-// whether to dispatch an intent or not.
-class DispatchIntentTaskHelper
- : public base::RefCountedThreadSafe<DispatchIntentTaskHelper> {
- public:
- DispatchIntentTaskHelper(
- const base::WeakPtr<DeviceAttachedIntentSource> source,
- SystemMonitor::RemovableStorageInfo device_info)
- : source_(source),
- device_info_(device_info) {
- }
-
- // Query callback for WebIntentsRegistry::GetIntentServices function.
- void MayDispatchIntentForService(
- const std::vector<WebIntentServiceData>& services) {
- if (!services.empty() && source_)
- source_->DispatchIntentsForService(device_info_);
- }
-
- private:
- friend class base::RefCountedThreadSafe<DispatchIntentTaskHelper>;
-
- ~DispatchIntentTaskHelper() {}
-
- // A weak pointer to |DeviceAttachedIntentSource| object to dispatch a
- // web intent.
- base::WeakPtr<DeviceAttachedIntentSource> source_;
-
- // Store the device info. This is used while registering the device as file
- // system.
- const SystemMonitor::RemovableStorageInfo device_info_;
-
- DISALLOW_COPY_AND_ASSIGN(DispatchIntentTaskHelper);
-};
-
-} // namespace
-
-DeviceAttachedIntentSource::DeviceAttachedIntentSource(
- Browser* browser, WebContentsDelegate* delegate)
- : browser_(browser), delegate_(delegate) {
- SystemMonitor* sys_monitor = SystemMonitor::Get();
- if (sys_monitor)
- sys_monitor->AddDevicesChangedObserver(this);
-}
-
-DeviceAttachedIntentSource::~DeviceAttachedIntentSource() {
- SystemMonitor* sys_monitor = SystemMonitor::Get();
- if (sys_monitor)
- sys_monitor->RemoveDevicesChangedObserver(this);
-}
-
-void DeviceAttachedIntentSource::OnRemovableStorageAttached(
- const std::string& id,
- const string16& name,
- const FilePath::StringType& location) {
- if (!browser_->window()->IsActive())
- return;
-
- // TODO(kmadhusu): Dispatch intents on incognito window.
- if (browser_->profile()->IsOffTheRecord())
- return;
-
- // Only handle mass storage for now.
- // TODO(kmadhusu): Handle all device types. http://crbug.com/140353.
- if (!MediaStorageUtil::IsMassStorageDevice(id))
- return;
- DCHECK(MediaStorageUtil::IsRemovableDevice(id));
-
- // Sanity checks for |device_path|.
- const FilePath device_path(location);
- if (!device_path.IsAbsolute() || device_path.ReferencesParent())
- return;
-
- SystemMonitor::RemovableStorageInfo device_info(id, name, location);
- scoped_refptr<DispatchIntentTaskHelper> task = new DispatchIntentTaskHelper(
- AsWeakPtr(), device_info);
- WebIntentsRegistryFactory::GetForProfile(browser_->profile())->
- GetIntentServices(
- UTF8ToUTF16(kAction), UTF8ToUTF16(kIntentType),
- base::Bind(&DispatchIntentTaskHelper::MayDispatchIntentForService,
- task.get()));
-}
-
-void DeviceAttachedIntentSource::DispatchIntentsForService(
- const base::SystemMonitor::RemovableStorageInfo& device_info) {
- // Store the media device info locally.
- device_id_map_.insert(std::make_pair(device_info.device_id, device_info));
-
- std::string device_name(UTF16ToUTF8(device_info.name));
- const FilePath device_path(device_info.location);
-
- // TODO(kinuko, kmadhusu): Use a different file system type for MTP.
- // TODO(kmadhusu): To manage the registered file systems efficiently, register
- // the attached device media file system using MediaFileSystemRegistry.
- const std::string fs_id = fileapi::IsolatedContext::GetInstance()->
- RegisterFileSystemForPath(fileapi::kFileSystemTypeNativeMedia,
- device_path, &device_name);
-
- DCHECK(!fs_id.empty());
- webkit_glue::WebIntentData intent(
- UTF8ToUTF16(kAction), UTF8ToUTF16(kIntentType), device_name, fs_id);
-
- delegate_->WebIntentDispatch(NULL /* no WebContents */,
- content::WebIntentsDispatcher::Create(intent));
-}
-
-void DeviceAttachedIntentSource::OnRemovableStorageDetached(
- const std::string& id) {
- DeviceIdToInfoMap::iterator it = device_id_map_.find(id);
- if (it == device_id_map_.end())
- return;
-
- FilePath path(it->second.location);
- fileapi::IsolatedContext::GetInstance()->RevokeFileSystemByPath(path);
- device_id_map_.erase(it);
-}
« no previous file with comments | « chrome/browser/intents/device_attached_intent_source.h ('k') | chrome/browser/ui/browser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698