OLD | NEW |
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/intents/web_intent_picker_controller.h" | 5 #include "chrome/browser/ui/intents/web_intent_picker_controller.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
458 GetIndexOfTabContents(tab_contents_); | 458 GetIndexOfTabContents(tab_contents_); |
459 chrome::ActivateTabAt(source_browser, source_index, false); | 459 chrome::ActivateTabAt(source_browser, source_index, false); |
460 } | 460 } |
461 } | 461 } |
462 service_tab_ = NULL; | 462 service_tab_ = NULL; |
463 } | 463 } |
464 | 464 |
465 intents_dispatcher_ = NULL; | 465 intents_dispatcher_ = NULL; |
466 } | 466 } |
467 | 467 |
| 468 void WebIntentPickerController::AddServiceToModel( |
| 469 const webkit_glue::WebIntentServiceData& service) { |
| 470 FaviconService* favicon_service = GetFaviconService(tab_contents_); |
| 471 |
| 472 picker_model_->AddInstalledService( |
| 473 service.title, |
| 474 service.service_url, |
| 475 ConvertDisposition(service.disposition)); |
| 476 |
| 477 pending_async_count_++; |
| 478 FaviconService::Handle handle = favicon_service->GetFaviconForURL( |
| 479 service.service_url, |
| 480 history::FAVICON, |
| 481 &favicon_consumer_, |
| 482 base::Bind( |
| 483 &WebIntentPickerController::OnFaviconDataAvailable, |
| 484 weak_ptr_factory_.GetWeakPtr())); |
| 485 favicon_consumer_.SetClientData( |
| 486 favicon_service, handle, picker_model_->GetInstalledServiceCount() - 1); |
| 487 } |
| 488 |
468 void WebIntentPickerController::OnWebIntentServicesAvailable( | 489 void WebIntentPickerController::OnWebIntentServicesAvailable( |
469 const std::vector<webkit_glue::WebIntentServiceData>& services) { | 490 const std::vector<webkit_glue::WebIntentServiceData>& services) { |
470 FaviconService* favicon_service = GetFaviconService(tab_contents_); | 491 for (size_t i = 0; i < services.size(); ++i) |
471 for (size_t i = 0; i < services.size(); ++i) { | 492 AddServiceToModel(services[i]); |
472 picker_model_->AddInstalledService( | |
473 services[i].title, | |
474 services[i].service_url, | |
475 ConvertDisposition(services[i].disposition)); | |
476 | |
477 pending_async_count_++; | |
478 FaviconService::Handle handle = favicon_service->GetFaviconForURL( | |
479 services[i].service_url, | |
480 history::FAVICON, | |
481 &favicon_consumer_, | |
482 base::Bind( | |
483 &WebIntentPickerController::OnFaviconDataAvailable, | |
484 weak_ptr_factory_.GetWeakPtr())); | |
485 favicon_consumer_.SetClientData(favicon_service, handle, i); | |
486 } | |
487 | 493 |
488 RegistryCallsCompleted(); | 494 RegistryCallsCompleted(); |
489 AsyncOperationFinished(); | 495 AsyncOperationFinished(); |
490 } | 496 } |
491 | 497 |
492 void WebIntentPickerController::WebIntentServicesForExplicitIntent( | 498 void WebIntentPickerController::WebIntentServicesForExplicitIntent( |
493 const std::vector<webkit_glue::WebIntentServiceData>& services) { | 499 const std::vector<webkit_glue::WebIntentServiceData>& services) { |
494 DCHECK(intents_dispatcher_); | 500 DCHECK(intents_dispatcher_); |
495 DCHECK(intents_dispatcher_->GetIntent().service.is_valid()); | 501 DCHECK(intents_dispatcher_->GetIntent().service.is_valid()); |
496 for (size_t i = 0; i < services.size(); ++i) { | 502 for (size_t i = 0; i < services.size(); ++i) { |
497 if (services[i].service_url != intents_dispatcher_->GetIntent().service) | 503 if (services[i].service_url != intents_dispatcher_->GetIntent().service) |
498 continue; | 504 continue; |
499 | 505 |
500 picker_model_->AddInstalledService( | 506 AddServiceToModel(services[i]); |
501 services[i].title, | |
502 services[i].service_url, | |
503 ConvertDisposition(services[i].disposition)); | |
504 | |
505 pending_async_count_++; | |
506 FaviconService* favicon_service = GetFaviconService(tab_contents_); | |
507 FaviconService::Handle handle = favicon_service->GetFaviconForURL( | |
508 services[i].service_url, | |
509 history::FAVICON, | |
510 &favicon_consumer_, | |
511 base::Bind( | |
512 &WebIntentPickerController::OnFaviconDataAvailable, | |
513 weak_ptr_factory_.GetWeakPtr())); | |
514 favicon_consumer_.SetClientData( | |
515 favicon_service, handle, | |
516 picker_model_->GetInstalledServiceCount() - 1); | |
517 | 507 |
518 if (services[i].disposition == | 508 if (services[i].disposition == |
519 webkit_glue::WebIntentServiceData::DISPOSITION_INLINE) | 509 webkit_glue::WebIntentServiceData::DISPOSITION_INLINE) |
520 CreatePicker(); | 510 CreatePicker(); |
521 OnServiceChosen(services[i].service_url, | 511 OnServiceChosen(services[i].service_url, |
522 ConvertDisposition(services[i].disposition)); | 512 ConvertDisposition(services[i].disposition)); |
523 AsyncOperationFinished(); | 513 AsyncOperationFinished(); |
524 return; | 514 return; |
525 } | 515 } |
526 | 516 |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
768 // If picker is non-NULL, it was set by a test. | 758 // If picker is non-NULL, it was set by a test. |
769 if (picker_ == NULL) | 759 if (picker_ == NULL) |
770 picker_ = WebIntentPicker::Create(tab_contents_, this, picker_model_.get()); | 760 picker_ = WebIntentPicker::Create(tab_contents_, this, picker_model_.get()); |
771 picker_shown_ = true; | 761 picker_shown_ = true; |
772 } | 762 } |
773 | 763 |
774 void WebIntentPickerController::ClosePicker() { | 764 void WebIntentPickerController::ClosePicker() { |
775 if (picker_) | 765 if (picker_) |
776 picker_->Close(); | 766 picker_->Close(); |
777 } | 767 } |
OLD | NEW |