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

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

Issue 10980002: Mac Web Intents Part 1: Show extension download progress (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 side-by-side diff with in-line comments
Download patch
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 75dd7fd8dab27847bb2d0ca05f100183a996dca7..9fc23636316e5adb8e95194a613cfff75c53d3d9 100644
--- a/chrome/browser/ui/intents/web_intent_picker_controller.cc
+++ b/chrome/browser/ui/intents/web_intent_picker_controller.cc
@@ -12,6 +12,8 @@
#include "base/memory/scoped_ptr.h"
#include "base/time.h"
#include "base/utf_string_conversions.h"
+#include "chrome/browser/download/download_item_model.h"
+#include "chrome/browser/download/download_util.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/platform_app_launcher.h"
#include "chrome/browser/extensions/webstore_installer.h"
@@ -39,6 +41,7 @@
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/url_constants.h"
#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/download_manager.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/notification_source.h"
#include "content/public/browser/web_contents.h"
@@ -469,6 +472,8 @@ void WebIntentPickerController::OnInlineDispositionWebContentsCreated(
void WebIntentPickerController::OnExtensionInstallRequested(
const std::string& id) {
+ picker_model_->SetPendingInstallExtensionId(id);
Greg Billock 2012/09/25 07:15:46 Needed? I don't see where this is used.
Greg Billock 2012/10/02 03:02:29 Now used?
sail 2012/10/02 18:57:01 Yea, used here: http://codereview.chromium.org/110
+
scoped_ptr<WebstoreInstaller::Approval> approval(
WebstoreInstaller::Approval::CreateWithInstallPrompt(
tab_contents_->profile()));
@@ -527,12 +532,27 @@ void WebIntentPickerController::OnChooseAnotherService() {
void WebIntentPickerController::OnClosing() {
SetDialogState(kPickerHidden);
picker_ = NULL;
+ CancelDownload();
#if defined(TOOLKIT_VIEWS)
if (cancelled_)
OnUserCancelledPickerDialog();
#endif
}
+void WebIntentPickerController::OnExtensionDownloadStarted(
+ const std::string& id,
+ content::DownloadItem* item) {
+ download_util::SetShouldShowInShelf(item, false);
Nico 2012/09/25 03:07:18 From what I understand, this relies on this notifi
asanka 2012/09/25 16:29:30 The ordering is: 1. DownloadManager::OnDownloadCre
Steve McKay 2012/09/25 18:56:04 What if we flipped the perspective a bit and start
Greg Billock 2012/10/02 19:20:38 When we use a separate RequestHandler for intents,
+ download_id_ = item->GetGlobalId();
+ UpdateDownloadState(id, item);
+}
+
+void WebIntentPickerController::OnExtensionDownloadProgress(
+ const std::string& id,
+ content::DownloadItem* item) {
+ UpdateDownloadState(id, item);
+}
+
void WebIntentPickerController::OnExtensionInstallSuccess(
const std::string& extension_id) {
// OnExtensionInstallSuccess is called via NotificationService::Notify before
@@ -549,7 +569,12 @@ void WebIntentPickerController::OnExtensionInstallSuccess(
void WebIntentPickerController::DispatchToInstalledExtension(
const std::string& extension_id) {
web_intents::RecordCWSExtensionInstalled(uma_bucket_);
- picker_->OnExtensionInstallSuccess(extension_id);
+
+ download_id_ = content::DownloadId();
+ picker_model_->ClearPendingInstall();
+ if (picker_)
groby-ooo-7-16 2012/09/25 22:20:56 nit: This should never be NULL. Can we just DCHECK
sail 2012/10/02 18:57:01 Unfortunately there's this function is called asyn
+ picker_->OnExtensionInstallSuccess(extension_id);
+
WebIntentsRegistry::IntentServiceList services;
GetWebIntentsRegistry(tab_contents_)->GetIntentServicesForExtensionFilter(
picker_model_->action(), picker_model_->type(),
@@ -572,8 +597,17 @@ void WebIntentPickerController::DispatchToInstalledExtension(
void WebIntentPickerController::OnExtensionInstallFailure(
const std::string& id,
- const std::string& error) {
- picker_->OnExtensionInstallFailure(id);
+ const std::string& error,
+ bool cancelled) {
+ CancelDownload();
asanka 2012/09/25 16:29:30 Why call CancelDownload() here?
sail 2012/10/02 18:57:01 For example, if we weren't able to unpack the exte
+ // If the user cancelled the install then don't show an error message.
Nico 2012/09/25 03:07:18 nit: canceled
sail 2012/10/02 18:57:01 Weird, it looks like we use both in chrome/*: dhcp
+ if (cancelled)
+ picker_model_->ClearPendingInstall();
+ else
+ picker_model_->SetPendingInstallStatusString(UTF8ToUTF16(error));
+
+ if (picker_)
+ picker_->OnExtensionInstallFailure(id);
AsyncOperationFinished();
}
@@ -1062,3 +1096,25 @@ void WebIntentPickerController::ClosePicker() {
if (picker_)
picker_->Close();
}
+
+void WebIntentPickerController::UpdateDownloadState(
Steve McKay 2012/09/25 18:56:04 Feels like this entire method should be pushed int
sail 2012/10/02 18:57:01 Done.
+ const std::string& id,
+ content::DownloadItem* item) {
+ picker_model_->SetPendingInstallDownloadPercent(item->PercentComplete());
+ DownloadItemModel download_model(item);
+ picker_model_->SetPendingInstallStatusString(download_model.GetStatusText());
+}
+
+void WebIntentPickerController::CancelDownload() {
Steve McKay 2012/09/25 18:56:04 CancelExtensionDownload Does the picker model nee
sail 2012/10/02 18:57:01 Done. This used to be in the caller code. Moved to
+ if (!download_id_.IsValid())
+ return;
+ content::DownloadManager* download_manager =
+ content::BrowserContext::GetDownloadManager(tab_contents_->profile());
+ if (!download_manager)
+ return;
+ content::DownloadItem* item =
+ download_manager->GetDownload(download_id_.local());
+ if (item)
+ item->Cancel(true);
+ download_id_ = content::DownloadId();
+}

Powered by Google App Engine
This is Rietveld 408576698