| 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 88b3e4e8710baca3d4c62b3b3f9f464e7d99483f..a80f46d5c17a0fb97cbc1eeb0fd08f6e9a93ad30 100644
|
| --- a/chrome/browser/ui/intents/web_intent_picker_controller.cc
|
| +++ b/chrome/browser/ui/intents/web_intent_picker_controller.cc
|
| @@ -138,6 +138,7 @@ WebIntentPickerController::WebIntentPickerController(
|
| picker_(NULL),
|
| picker_model_(new WebIntentPickerModel()),
|
| pending_async_count_(0),
|
| + pending_registry_calls_count_(0),
|
| picker_shown_(false),
|
| intents_dispatcher_(NULL),
|
| service_tab_(NULL),
|
| @@ -217,11 +218,24 @@ void WebIntentPickerController::ShowDialog(const string16& action,
|
| }
|
| }
|
|
|
| - pending_async_count_+= 2;
|
| + pending_async_count_ += 2;
|
| + pending_registry_calls_count_ += 1;
|
| +
|
| GetWebIntentsRegistry(wrapper_)->GetIntentServices(
|
| action, type,
|
| base::Bind(&WebIntentPickerController::OnWebIntentServicesAvailable,
|
| weak_ptr_factory_.GetWeakPtr()));
|
| +
|
| + GURL invoking_url = wrapper_->web_contents()->GetURL();
|
| + if (invoking_url.is_valid()) {
|
| + pending_async_count_++;
|
| + pending_registry_calls_count_++;
|
| + GetWebIntentsRegistry(wrapper_)->GetDefaultIntentService(
|
| + action, type, invoking_url,
|
| + base::Bind(&WebIntentPickerController::OnWebIntentDefaultsAvailable,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| + }
|
| +
|
| GetCWSIntentsRegistry(wrapper_)->GetIntentServices(
|
| action, type,
|
| base::Bind(&WebIntentPickerController::OnCWSIntentServicesAvailable,
|
| @@ -413,11 +427,8 @@ void WebIntentPickerController::OnWebIntentServicesAvailable(
|
| favicon_consumer_.SetClientData(favicon_service, handle, i);
|
| }
|
|
|
| + RegistryCallsCompleted();
|
| AsyncOperationFinished();
|
| -
|
| - CreatePicker();
|
| - picker_->SetActionString(GetIntentActionString(
|
| - UTF16ToUTF8(picker_model_->action())));
|
| }
|
|
|
| void WebIntentPickerController::WebIntentServicesForExplicitIntent(
|
| @@ -445,6 +456,43 @@ void WebIntentPickerController::WebIntentServicesForExplicitIntent(
|
| AsyncOperationFinished();
|
| }
|
|
|
| +void WebIntentPickerController::OnWebIntentDefaultsAvailable(
|
| + const DefaultWebIntentService& default_service) {
|
| + if (!default_service.service_url.empty()) {
|
| + DCHECK(default_service.suppression == 0);
|
| + picker_model_->set_default_service_url(GURL(default_service.service_url));
|
| + }
|
| +
|
| + RegistryCallsCompleted();
|
| + AsyncOperationFinished();
|
| +}
|
| +
|
| +void WebIntentPickerController::RegistryCallsCompleted() {
|
| + pending_registry_calls_count_--;
|
| + if (pending_registry_calls_count_ != 0) return;
|
| +
|
| + if (picker_model_->default_service_url().is_valid()) {
|
| + // If there's a default service, dispatch to it immediately
|
| + // without showing the picker.
|
| + const WebIntentPickerModel::InstalledService* default_service =
|
| + picker_model_->GetInstalledServiceWithURL(
|
| + GURL(picker_model_->default_service_url()));
|
| +
|
| + if (default_service != NULL) {
|
| + if (default_service->disposition ==
|
| + WebIntentPickerModel::DISPOSITION_INLINE)
|
| + CreatePicker();
|
| +
|
| + OnServiceChosen(default_service->url, default_service->disposition);
|
| + return;
|
| + }
|
| + }
|
| +
|
| + CreatePicker();
|
| + picker_->SetActionString(GetIntentActionString(
|
| + UTF16ToUTF8(picker_model_->action())));
|
| +}
|
| +
|
| void WebIntentPickerController::OnFaviconDataAvailable(
|
| FaviconService::Handle handle, history::FaviconData favicon_data) {
|
| size_t index = favicon_consumer_.GetClientDataForCurrentRequest();
|
|
|