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

Side by Side Diff: chrome/browser/ui/webui/options/media_galleries_handler.cc

Issue 24269007: Media Galleries API: Fix MediaGalleriesPreferences finders race. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 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 #include "chrome/browser/ui/webui/options/media_galleries_handler.h" 5 #include "chrome/browser/ui/webui/options/media_galleries_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/prefs/pref_service.h" 8 #include "base/prefs/pref_service.h"
9 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "chrome/browser/browser_process.h" 10 #include "chrome/browser/browser_process.h"
(...skipping 29 matching lines...) Expand all
40 { "manageGalleriesButton", IDS_MEDIA_GALLERY_MANAGE_BUTTON }, 40 { "manageGalleriesButton", IDS_MEDIA_GALLERY_MANAGE_BUTTON },
41 { "addNewGalleryButton", IDS_MEDIA_GALLERY_ADD_NEW_BUTTON }, 41 { "addNewGalleryButton", IDS_MEDIA_GALLERY_ADD_NEW_BUTTON },
42 }; 42 };
43 43
44 RegisterStrings(values, resources, arraysize(resources)); 44 RegisterStrings(values, resources, arraysize(resources));
45 RegisterTitle(values, "manageMediaGalleries", 45 RegisterTitle(values, "manageMediaGalleries",
46 IDS_MEDIA_GALLERY_MANAGE_TITLE); 46 IDS_MEDIA_GALLERY_MANAGE_TITLE);
47 } 47 }
48 48
49 void MediaGalleriesHandler::InitializePage() { 49 void MediaGalleriesHandler::InitializePage() {
50 StorageMonitor::GetInstance()->EnsureInitialized( 50 Profile* profile = Profile::FromWebUI(web_ui());
51 base::Bind(&MediaGalleriesHandler::InitializeOnStorageMonitorInit, 51 MediaGalleriesPreferences* preferences =
52 weak_ptr_factory_.GetWeakPtr())); 52 g_browser_process->media_file_system_registry()->GetPreferences(profile);
53 preferences->EnsureInitialized(base::Bind(
54 &MediaGalleriesHandler::InitializeOnMediaGalleriesPreferencesInit,
55 weak_ptr_factory_.GetWeakPtr()));
53 } 56 }
54 57
55 void MediaGalleriesHandler::InitializeOnStorageMonitorInit() { 58 void MediaGalleriesHandler::InitializeOnMediaGalleriesPreferencesInit() {
56 Profile* profile = Profile::FromWebUI(web_ui()); 59 Profile* profile = Profile::FromWebUI(web_ui());
57 if (!MediaGalleriesPreferences::APIHasBeenUsed(profile)) 60 if (!MediaGalleriesPreferences::APIHasBeenUsed(profile))
58 return; 61 return;
59 62
60 if (pref_change_registrar_.IsEmpty()) { 63 if (pref_change_registrar_.IsEmpty()) {
61 pref_change_registrar_.Init(profile->GetPrefs()); 64 pref_change_registrar_.Init(profile->GetPrefs());
62 pref_change_registrar_.Add( 65 pref_change_registrar_.Add(
63 prefs::kMediaGalleriesRememberedGalleries, 66 prefs::kMediaGalleriesRememberedGalleries,
64 base::Bind(&MediaGalleriesHandler::OnGalleriesChanged, 67 base::Bind(&MediaGalleriesHandler::OnGalleriesChanged,
65 base::Unretained(this))); 68 base::Unretained(this)));
66 } 69 }
67 70
68 OnGalleriesChanged(); 71 OnGalleriesChanged();
69 } 72 }
70 73
71 void MediaGalleriesHandler::RegisterMessages() { 74 void MediaGalleriesHandler::RegisterMessages() {
72 StorageMonitor::GetInstance()->EnsureInitialized( 75 StorageMonitor::GetInstance()->EnsureInitialized(
73 base::Bind(&MediaGalleriesHandler::RegisterOnStorageMonitorInit, 76 base::Bind(&MediaGalleriesHandler::RegisterOnStorageMonitorInit,
Lei Zhang 2013/09/21 00:12:35 Also change this to just wait for pref initializat
tommycli 2013/09/23 20:39:12 Done.
74 weak_ptr_factory_.GetWeakPtr())); 77 weak_ptr_factory_.GetWeakPtr()));
75 } 78 }
76 79
77 void MediaGalleriesHandler::RegisterOnStorageMonitorInit() { 80 void MediaGalleriesHandler::RegisterOnStorageMonitorInit() {
78 web_ui()->RegisterMessageCallback( 81 web_ui()->RegisterMessageCallback(
79 "addNewGallery", 82 "addNewGallery",
80 base::Bind(&MediaGalleriesHandler::HandleAddNewGallery, 83 base::Bind(&MediaGalleriesHandler::HandleAddNewGallery,
81 base::Unretained(this))); 84 base::Unretained(this)));
82 web_ui()->RegisterMessageCallback( 85 web_ui()->RegisterMessageCallback(
83 "forgetGallery", 86 "forgetGallery",
84 base::Bind(&MediaGalleriesHandler::HandleForgetGallery, 87 base::Bind(&MediaGalleriesHandler::HandleForgetGallery,
85 base::Unretained(this))); 88 base::Unretained(this)));
86 } 89 }
87 90
88 void MediaGalleriesHandler::OnGalleriesChanged() { 91 void MediaGalleriesHandler::OnGalleriesChanged() {
89 DCHECK(StorageMonitor::GetInstance()->IsInitialized()); 92 DCHECK(StorageMonitor::GetInstance()->IsInitialized());
90 Profile* profile = Profile::FromWebUI(web_ui()); 93 Profile* profile = Profile::FromWebUI(web_ui());
91 MediaGalleriesPreferences* preferences = 94 MediaGalleriesPreferences* preferences =
92 g_browser_process->media_file_system_registry()->GetPreferences(profile); 95 g_browser_process->media_file_system_registry()->GetPreferences(profile);
96 DCHECK(preferences->IsInitialized());
93 97
94 ListValue list; 98 ListValue list;
95 const MediaGalleriesPrefInfoMap& galleries = preferences->known_galleries(); 99 const MediaGalleriesPrefInfoMap& galleries = preferences->known_galleries();
96 for (MediaGalleriesPrefInfoMap::const_iterator iter = galleries.begin(); 100 for (MediaGalleriesPrefInfoMap::const_iterator iter = galleries.begin();
97 iter != galleries.end(); ++iter) { 101 iter != galleries.end(); ++iter) {
98 const MediaGalleryPrefInfo& gallery = iter->second; 102 const MediaGalleryPrefInfo& gallery = iter->second;
99 if (gallery.type == MediaGalleryPrefInfo::kBlackListed) 103 if (gallery.type == MediaGalleryPrefInfo::kBlackListed)
100 continue; 104 continue;
101 105
102 DictionaryValue* dict = new DictionaryValue(); 106 DictionaryValue* dict = new DictionaryValue();
(...skipping 28 matching lines...) Expand all
131 if (!args->GetString(0, &string_id) || 135 if (!args->GetString(0, &string_id) ||
132 !base::StringToUint64(string_id, &id)) { 136 !base::StringToUint64(string_id, &id)) {
133 NOTREACHED(); 137 NOTREACHED();
134 return; 138 return;
135 } 139 }
136 140
137 DCHECK(StorageMonitor::GetInstance()->IsInitialized()); 141 DCHECK(StorageMonitor::GetInstance()->IsInitialized());
138 MediaGalleriesPreferences* preferences = 142 MediaGalleriesPreferences* preferences =
139 g_browser_process->media_file_system_registry()->GetPreferences( 143 g_browser_process->media_file_system_registry()->GetPreferences(
140 Profile::FromWebUI(web_ui())); 144 Profile::FromWebUI(web_ui()));
145 DCHECK(preferences->IsInitialized());
141 preferences->ForgetGalleryById(id); 146 preferences->ForgetGalleryById(id);
142 } 147 }
143 148
144 void MediaGalleriesHandler::FileSelected(const base::FilePath& path, 149 void MediaGalleriesHandler::FileSelected(const base::FilePath& path,
145 int index, 150 int index,
146 void* params) { 151 void* params) {
147 DCHECK(StorageMonitor::GetInstance()->IsInitialized()); 152 DCHECK(StorageMonitor::GetInstance()->IsInitialized());
148 MediaGalleriesPreferences* preferences = 153 MediaGalleriesPreferences* preferences =
149 g_browser_process->media_file_system_registry()->GetPreferences( 154 g_browser_process->media_file_system_registry()->GetPreferences(
150 Profile::FromWebUI(web_ui())); 155 Profile::FromWebUI(web_ui()));
156 DCHECK(preferences->IsInitialized());
151 preferences->AddGalleryByPath(path); 157 preferences->AddGalleryByPath(path);
152 } 158 }
153 159
154 } // namespace options 160 } // namespace options
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698