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

Unified Diff: chrome/browser/ui/intents/web_intent_picker_controller.cc

Issue 10854019: Make GetIntentServicesForExtensionFilter work synchronously (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Make GetIntentServicesForExtensionFilter synchronous. Created 8 years, 4 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/ui/intents/web_intent_picker_controller.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/intents/web_intent_picker_controller.cc
diff --git a/chrome/browser/ui/intents/web_intent_picker_controller.cc b/chrome/browser/ui/intents/web_intent_picker_controller.cc
index 23bb584d1eeabefe56d3194e458ffcc6a2c2346f..e5b7b4ec758282f9d95d1554420dd3878383a070 100644
--- a/chrome/browser/ui/intents/web_intent_picker_controller.cc
+++ b/chrome/browser/ui/intents/web_intent_picker_controller.cc
@@ -417,16 +417,40 @@ void WebIntentPickerController::OnClosing() {
}
void WebIntentPickerController::OnExtensionInstallSuccess(
- const std::string& id) {
- picker_->OnExtensionInstallSuccess(id);
- pending_async_count_++;
- GetWebIntentsRegistry(tab_contents_)->GetIntentServicesForExtensionFilter(
- picker_model_->action(),
- picker_model_->mimetype(),
- id,
+ const std::string& extension_id) {
+ // OnExtensionInstallSuccess is called via NotificationService::Notify before
+ // the extension is added to the ExtensionService. Dispatch via PostTask to
+ // allow ExtensionService to update.
+ MessageLoop::current()->PostTask(
+ FROM_HERE,
base::Bind(
- &WebIntentPickerController::OnExtensionInstallServiceAvailable,
- weak_ptr_factory_.GetWeakPtr()));
+ &WebIntentPickerController::DispatchToInstalledExtension,
+ base::Unretained(this),
+ extension_id));
+}
+
+void WebIntentPickerController::DispatchToInstalledExtension(
+ const std::string& extension_id) {
+ picker_->OnExtensionInstallSuccess(extension_id);
+ WebIntentsRegistry::IntentServiceList services;
+ GetWebIntentsRegistry(tab_contents_)->GetIntentServicesForExtensionFilter(
+ picker_model_->action(), picker_model_->mimetype(),
+ extension_id,
+ &services);
+
+ // Extension must be registered with registry by now.
+ DCHECK(services.size() > 0);
+
+ // TODO(binji): We're going to need to disambiguate if there are multiple
+ // services. For now, just choose the first.
+ const webkit_glue::WebIntentServiceData& service_data = services[0];
+
+ picker_model_->AddInstalledService(
+ service_data.title, service_data.service_url,
+ ConvertDisposition(service_data.disposition));
+ OnServiceChosen(
+ service_data.service_url,
+ ConvertDisposition(service_data.disposition));
AsyncOperationFinished();
}
@@ -730,22 +754,6 @@ bool WebIntentPickerController::ShowLocationBarPickerTool() {
return window_disposition_source_ || source_intents_dispatcher_;
}
-void WebIntentPickerController::OnExtensionInstallServiceAvailable(
- const std::vector<webkit_glue::WebIntentServiceData>& services) {
- DCHECK(services.size() > 0);
-
- // TODO(binji): We're going to need to disambiguate if there are multiple
- // services. For now, just choose the first.
- const webkit_glue::WebIntentServiceData& service_data = services[0];
- picker_model_->AddInstalledService(
- service_data.title, service_data.service_url,
- ConvertDisposition(service_data.disposition));
- OnServiceChosen(
- service_data.service_url,
- ConvertDisposition(service_data.disposition));
- AsyncOperationFinished();
-}
-
void WebIntentPickerController::AsyncOperationFinished() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
if (--pending_async_count_ == 0) {
« no previous file with comments | « chrome/browser/ui/intents/web_intent_picker_controller.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698