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

Side by Side Diff: chrome/browser/media_galleries/media_file_system_registry.cc

Issue 86743002: [MediaGalleries] Enable iPhoto gallery (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Take out logging -- found race Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // MediaFileSystemRegistry implementation. 5 // MediaFileSystemRegistry implementation.
6 6
7 #include "chrome/browser/media_galleries/media_file_system_registry.h" 7 #include "chrome/browser/media_galleries/media_file_system_registry.h"
8 8
9 #include <set> 9 #include <set>
10 #include <vector> 10 #include <vector>
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 } 141 }
142 default: { 142 default: {
143 NOTREACHED(); 143 NOTREACHED();
144 break; 144 break;
145 } 145 }
146 } 146 }
147 } 147 }
148 148
149 void OnRendererProcessTerminated(const RenderProcessHost* rph) { 149 void OnRendererProcessTerminated(const RenderProcessHost* rph) {
150 RPHRefCount::iterator rph_info = refs_.find(rph); 150 RPHRefCount::iterator rph_info = refs_.find(rph);
151 // Will this crash if the RPH is navigated to a page on the same host
vandebo (ex-Chrome) 2014/01/06 18:45:03 This this a debug comment?
Greg Billock 2014/01/07 16:50:55 I think this is a real hole. Filling.
152 // (triggering OWCDON()) and then the tab crashes?
151 DCHECK(rph_info != refs_.end()); 153 DCHECK(rph_info != refs_.end());
152 delete rph_info->second; 154 delete rph_info->second;
153 refs_.erase(rph_info); 155 refs_.erase(rph_info);
154 if (refs_.empty()) 156 if (refs_.empty())
155 no_references_callback_.Run(); 157 no_references_callback_.Run();
156 } 158 }
157 159
158 void OnWebContentsDestroyedOrNavigated(const WebContents* contents) { 160 void OnWebContentsDestroyedOrNavigated(const WebContents* contents) {
159 RenderProcessHost* rph = contents->GetRenderProcessHost(); 161 RenderProcessHost* rph = contents->GetRenderProcessHost();
160 RPHRefCount::iterator rph_info = refs_.find(rph); 162 RPHRefCount::iterator rph_info = refs_.find(rph);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 282
281 private: 283 private:
282 typedef std::map<MediaGalleryPrefId, MediaFileSystemInfo> PrefIdFsInfoMap; 284 typedef std::map<MediaGalleryPrefId, MediaFileSystemInfo> PrefIdFsInfoMap;
283 285
284 // Private destructor and friend declaration for ref counted implementation. 286 // Private destructor and friend declaration for ref counted implementation.
285 friend class base::RefCountedThreadSafe<ExtensionGalleriesHost>; 287 friend class base::RefCountedThreadSafe<ExtensionGalleriesHost>;
286 288
287 virtual ~ExtensionGalleriesHost() { 289 virtual ~ExtensionGalleriesHost() {
288 DCHECK(rph_refs_.empty()); 290 DCHECK(rph_refs_.empty());
289 DCHECK(pref_id_map_.empty()); 291 DCHECK(pref_id_map_.empty());
290
291 } 292 }
292 293
294 // It appears there's a shutdown race in some browser tests. If the RPHs shut
295 // down first, there may still be Filter... calls pending which will then
296 // invoke this method interleaved in the destruction callback sequence and
297 // re-populate pref_id_map_.
vandebo (ex-Chrome) 2014/01/06 18:45:03 So if rph_refs_ is empty, we know that we lost the
Greg Billock 2014/01/07 16:50:55 I also looked, and I agree this is a fine check. A
293 void GetMediaFileSystemsForAttachedDevices( 298 void GetMediaFileSystemsForAttachedDevices(
294 const MediaStorageUtil::DeviceIdSet* attached_devices, 299 const MediaStorageUtil::DeviceIdSet* attached_devices,
295 const MediaGalleryPrefIdSet& galleries, 300 const MediaGalleryPrefIdSet& galleries,
296 const MediaGalleriesPrefInfoMap& galleries_info, 301 const MediaGalleriesPrefInfoMap& galleries_info,
297 const MediaFileSystemsCallback& callback) { 302 const MediaFileSystemsCallback& callback) {
298 std::vector<MediaFileSystemInfo> result; 303 std::vector<MediaFileSystemInfo> result;
299 MediaGalleryPrefIdSet new_galleries; 304 MediaGalleryPrefIdSet new_galleries;
300 for (std::set<MediaGalleryPrefId>::const_iterator pref_id_it = 305 for (std::set<MediaGalleryPrefId>::const_iterator pref_id_it =
301 galleries.begin(); 306 galleries.begin();
302 pref_id_it != galleries.end(); 307 pref_id_it != galleries.end();
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 virtual std::string RegisterFileSystem( 508 virtual std::string RegisterFileSystem(
504 const std::string& device_id, const base::FilePath& path) OVERRIDE { 509 const std::string& device_id, const base::FilePath& path) OVERRIDE {
505 if (StorageInfo::IsMassStorageDevice(device_id)) { 510 if (StorageInfo::IsMassStorageDevice(device_id)) {
506 return RegisterFileSystemForMassStorage(device_id, path); 511 return RegisterFileSystemForMassStorage(device_id, path);
507 } else { 512 } else {
508 return RegisterFileSystemForMTPDevice(device_id, path); 513 return RegisterFileSystemForMTPDevice(device_id, path);
509 } 514 }
510 } 515 }
511 516
512 virtual void RevokeFileSystem(const std::string& fsid) OVERRIDE { 517 virtual void RevokeFileSystem(const std::string& fsid) OVERRIDE {
518 // Does this need to do something about non-imported, non-MTP filesystems?
519 // It gets called during RPH shutdown, and may leave around local drive
520 // FS trash.
vandebo (ex-Chrome) 2014/01/06 18:45:03 What kind of trash do you mean?
Greg Billock 2014/01/07 16:50:55 Not exactly sure. Is there some cleanup that needs
513 ImportedMediaGalleryRegistry* imported_registry = 521 ImportedMediaGalleryRegistry* imported_registry =
514 ImportedMediaGalleryRegistry::GetInstance(); 522 ImportedMediaGalleryRegistry::GetInstance();
515 if (imported_registry->RevokeImportedFilesystemOnUIThread(fsid)) 523 if (imported_registry->RevokeImportedFilesystemOnUIThread(fsid))
516 return; 524 return;
517 525
518 IsolatedContext::GetInstance()->RevokeFileSystem(fsid); 526 IsolatedContext::GetInstance()->RevokeFileSystem(fsid);
519 527
520 content::BrowserThread::PostTask( 528 content::BrowserThread::PostTask(
521 content::BrowserThread::IO, FROM_HERE, base::Bind( 529 content::BrowserThread::IO, FROM_HERE, base::Bind(
522 &MTPDeviceMapService::RevokeMTPFileSystem, 530 &MTPDeviceMapService::RevokeMTPFileSystem,
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 DCHECK_EQ(1U, erase_count); 674 DCHECK_EQ(1U, erase_count);
667 if (extension_hosts->second.empty()) { 675 if (extension_hosts->second.empty()) {
668 // When a profile has no ExtensionGalleriesHosts left, remove the 676 // When a profile has no ExtensionGalleriesHosts left, remove the
669 // matching gallery-change-watcher since it is no longer needed. Leave the 677 // matching gallery-change-watcher since it is no longer needed. Leave the
670 // |extension_hosts| entry alone, since it indicates the profile has been 678 // |extension_hosts| entry alone, since it indicates the profile has been
671 // previously used. 679 // previously used.
672 MediaGalleriesPreferences* preferences = GetPreferences(profile); 680 MediaGalleriesPreferences* preferences = GetPreferences(profile);
673 preferences->RemoveGalleryChangeObserver(this); 681 preferences->RemoveGalleryChangeObserver(this);
674 } 682 }
675 } 683 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698