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

Side by Side Diff: chrome/browser/download/download_ui_controller.cc

Issue 852043002: Initial Implementation of Download Notification (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed build & test errors on non-ChromeOS platform. Created 5 years, 9 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/download/download_ui_controller.h" 5 #include "chrome/browser/download/download_ui_controller.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/command_line.h"
8 #include "base/stl_util.h" 9 #include "base/stl_util.h"
9 #include "chrome/browser/download/download_item_model.h" 10 #include "chrome/browser/download/download_item_model.h"
11 #include "chrome/browser/download/notification/download_notification_manager.h"
12 #include "chrome/browser/ui/browser_finder.h"
10 #include "chrome/browser/ui/browser_tabstrip.h" 13 #include "chrome/browser/ui/browser_tabstrip.h"
14 #include "chrome/common/chrome_switches.h"
11 #include "content/public/browser/download_item.h" 15 #include "content/public/browser/download_item.h"
12 #include "content/public/browser/web_contents.h" 16 #include "content/public/browser/web_contents.h"
13 #include "content/public/browser/web_contents_delegate.h" 17 #include "content/public/browser/web_contents_delegate.h"
14 18
15 #if defined(OS_ANDROID) 19 #if defined(OS_ANDROID)
16 #include "content/public/browser/android/download_controller_android.h" 20 #include "content/public/browser/android/download_controller_android.h"
17 #else 21 #else
18 #include "chrome/browser/profiles/profile.h" 22 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/ui/browser_finder.h" 23 #include "chrome/browser/ui/browser_finder.h"
20 #include "chrome/browser/ui/host_desktop.h" 24 #include "chrome/browser/ui/host_desktop.h"
21 #endif 25 #endif
22 26
23 namespace { 27 namespace {
24 28
25 // DefaultUIControllerDelegate{Android,} is used when a DownloadUIController is 29 // DownloadShelfUIControllerDelegate{Android,} is used when a
30 // DownloadUIController is
26 // constructed without specifying an explicit Delegate. 31 // constructed without specifying an explicit Delegate.
27 #if defined(OS_ANDROID) 32 #if defined(OS_ANDROID)
28 33
29 class DefaultUIControllerDelegateAndroid 34 class AndroidUIControllerDelegate : public DownloadUIController::Delegate {
30 : public DownloadUIController::Delegate {
31 public: 35 public:
32 DefaultUIControllerDelegateAndroid() {} 36 AndroidUIControllerDelegate() {}
33 ~DefaultUIControllerDelegateAndroid() override {} 37 ~AndroidUIControllerDelegate() override {}
34 38
35 private: 39 private:
36 // DownloadUIController::Delegate 40 // DownloadUIController::Delegate
37 void OnNewDownloadReady(content::DownloadItem* item) override; 41 void OnNewDownloadReady(content::DownloadItem* item) override;
38 }; 42 };
39 43
40 void DefaultUIControllerDelegateAndroid::OnNewDownloadReady( 44 void AndroidUIControllerDelegate::OnNewDownloadReady(
41 content::DownloadItem* item) { 45 content::DownloadItem* item) {
42 // The Android DownloadController is only interested in IN_PROGRESS downloads. 46 // The Android DownloadController is only interested in IN_PROGRESS downloads.
43 // Ones which are INTERRUPTED etc. can't be handed over to the Android 47 // Ones which are INTERRUPTED etc. can't be handed over to the Android
44 // DownloadManager. 48 // DownloadManager.
45 if (item->GetState() != content::DownloadItem::IN_PROGRESS) 49 if (item->GetState() != content::DownloadItem::IN_PROGRESS)
46 return; 50 return;
47 51
48 // GET downloads without authentication are delegated to the Android 52 // GET downloads without authentication are delegated to the Android
49 // DownloadManager. Chrome is responsible for the rest. See 53 // DownloadManager. Chrome is responsible for the rest. See
50 // InterceptDownloadResourceThrottle::ProcessDownloadRequest(). 54 // InterceptDownloadResourceThrottle::ProcessDownloadRequest().
51 content::DownloadControllerAndroid::Get()->OnDownloadStarted(item); 55 content::DownloadControllerAndroid::Get()->OnDownloadStarted(item);
52 } 56 }
53 57
54 #else // OS_ANDROID 58 #else // OS_ANDROID
55 59
56 class DefaultUIControllerDelegate : public DownloadUIController::Delegate { 60 class DownloadShelfUIControllerDelegate
61 : public DownloadUIController::Delegate {
57 public: 62 public:
58 // |profile| is required to outlive DefaultUIControllerDelegate. 63 // |profile| is required to outlive DownloadShelfUIControllerDelegate.
59 explicit DefaultUIControllerDelegate(Profile* profile) 64 explicit DownloadShelfUIControllerDelegate(Profile* profile)
60 : profile_(profile) {} 65 : profile_(profile) {}
61 ~DefaultUIControllerDelegate() override {} 66 ~DownloadShelfUIControllerDelegate() override {}
62 67
63 private: 68 private:
64 // DownloadUIController::Delegate 69 // DownloadUIController::Delegate
65 void OnNewDownloadReady(content::DownloadItem* item) override; 70 void OnNewDownloadReady(content::DownloadItem* item) override;
66 71
67 Profile* profile_; 72 Profile* profile_;
68 }; 73 };
69 74
70 void DefaultUIControllerDelegate::OnNewDownloadReady( 75 void DownloadShelfUIControllerDelegate::OnNewDownloadReady(
71 content::DownloadItem* item) { 76 content::DownloadItem* item) {
72 content::WebContents* web_contents = item->GetWebContents(); 77 content::WebContents* web_contents = item->GetWebContents();
73 Browser* browser = 78 Browser* browser =
74 web_contents ? chrome::FindBrowserWithWebContents(web_contents) : NULL; 79 web_contents ? chrome::FindBrowserWithWebContents(web_contents) : NULL;
75 80
76 // As a last resort, use the last active browser for this profile. Not ideal, 81 // As a last resort, use the last active browser for this profile. Not ideal,
77 // but better than not showing the download at all. 82 // but better than not showing the download at all.
78 if (browser == NULL) { 83 if (browser == NULL) {
79 browser = chrome::FindLastActiveWithProfile(profile_, 84 browser = chrome::FindLastActiveWithProfile(profile_,
80 chrome::GetActiveDesktop()); 85 chrome::GetActiveDesktop());
81 } 86 }
82 87
83 if (browser) 88 if (browser)
84 browser->ShowDownload(item); 89 browser->ShowDownload(item);
85 } 90 }
86 91
87 #endif // !OS_ANDROID 92 #endif // !OS_ANDROID
88 93
89 } // namespace 94 } // namespace
90 95
91 DownloadUIController::Delegate::~Delegate() { 96 DownloadUIController::Delegate::~Delegate() {
92 } 97 }
93 98
94 DownloadUIController::DownloadUIController(content::DownloadManager* manager, 99 DownloadUIController::DownloadUIController(content::DownloadManager* manager,
95 scoped_ptr<Delegate> delegate) 100 scoped_ptr<Delegate> delegate)
96 : download_notifier_(manager, this), 101 : download_notifier_(manager, this),
97 delegate_(delegate.Pass()) { 102 delegate_(delegate.Pass()) {
98 if (!delegate_) { 103 if (!delegate_) {
99 #if defined(OS_ANDROID) 104 #if defined(OS_ANDROID)
100 delegate_.reset(new DefaultUIControllerDelegateAndroid()); 105 delegate_.reset(new AndroidUIControllerDelegate());
101 #else 106 #else
102 // The delegate should not be invoked after the profile has gone away. This 107 // The delegate should not be invoked after the profile has gone away. This
103 // should be the case since DownloadUIController is owned by 108 // should be the case since DownloadUIController is owned by
104 // DownloadService, which in turn is a profile keyed service. 109 // DownloadService, which in turn is a profile keyed service.
105 delegate_.reset(new DefaultUIControllerDelegate( 110 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
106 Profile::FromBrowserContext(manager->GetBrowserContext()))); 111 switches::kEnableDownloadNotification)) {
112 delegate_.reset(new DownloadNotificationManager(
113 Profile::FromBrowserContext(manager->GetBrowserContext())));
114 } else {
115 delegate_.reset(new DownloadShelfUIControllerDelegate(
116 Profile::FromBrowserContext(manager->GetBrowserContext())));
117 }
107 #endif 118 #endif
108 } 119 }
109 } 120 }
110 121
111 DownloadUIController::~DownloadUIController() { 122 DownloadUIController::~DownloadUIController() {
112 } 123 }
113 124
114 void DownloadUIController::OnDownloadCreated(content::DownloadManager* manager, 125 void DownloadUIController::OnDownloadCreated(content::DownloadManager* manager,
115 content::DownloadItem* item) { 126 content::DownloadItem* item) {
116 // SavePackage downloads are created in a state where they can be shown in the 127 // SavePackage downloads are created in a state where they can be shown in the
(...skipping 10 matching lines...) Expand all
127 if (item_model.WasUINotified() || !item_model.ShouldNotifyUI()) 138 if (item_model.WasUINotified() || !item_model.ShouldNotifyUI())
128 return; 139 return;
129 140
130 // Wait until the target path is determined. 141 // Wait until the target path is determined.
131 if (item->GetTargetFilePath().empty()) 142 if (item->GetTargetFilePath().empty())
132 return; 143 return;
133 144
134 DownloadItemModel(item).SetWasUINotified(true); 145 DownloadItemModel(item).SetWasUINotified(true);
135 delegate_->OnNewDownloadReady(item); 146 delegate_->OnNewDownloadReady(item);
136 } 147 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698