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

Side by Side Diff: chrome/browser/ui/web_applications/web_app_ui.cc

Issue 11411180: move favicon download code from chrome/ into content/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years 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 | Annotate | Revision Log
OLDNEW
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/web_applications/web_app_ui.h" 5 #include "chrome/browser/ui/web_applications/web_app_ui.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "base/string16.h" 11 #include "base/string16.h"
12 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
13 #include "chrome/browser/extensions/tab_helper.h" 13 #include "chrome/browser/extensions/tab_helper.h"
14 #include "chrome/browser/favicon/favicon_download_helper.h"
15 #include "chrome/browser/favicon/favicon_download_helper_delegate.h"
16 #include "chrome/browser/favicon/favicon_tab_helper.h" 14 #include "chrome/browser/favicon/favicon_tab_helper.h"
17 #include "chrome/browser/favicon/favicon_util.h" 15 #include "chrome/browser/favicon/favicon_util.h"
18 #include "chrome/browser/profiles/profile.h" 16 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/web_applications/web_app.h" 17 #include "chrome/browser/web_applications/web_app.h"
20 #include "chrome/common/chrome_notification_types.h" 18 #include "chrome/common/chrome_notification_types.h"
21 #include "content/public/browser/browser_thread.h" 19 #include "content/public/browser/browser_thread.h"
20 #include "content/public/browser/favicon_download_delegate.h"
22 #include "content/public/browser/notification_details.h" 21 #include "content/public/browser/notification_details.h"
23 #include "content/public/browser/notification_registrar.h" 22 #include "content/public/browser/notification_registrar.h"
24 #include "content/public/browser/notification_source.h" 23 #include "content/public/browser/notification_source.h"
25 #include "content/public/browser/web_contents.h" 24 #include "content/public/browser/web_contents.h"
26 25
27 #if defined(OS_POSIX) && !defined(OS_MACOSX) 26 #if defined(OS_POSIX) && !defined(OS_MACOSX)
28 #include "base/environment.h" 27 #include "base/environment.h"
29 #endif 28 #endif
30 29
31 #if defined(OS_WIN) 30 #if defined(OS_WIN)
32 #include "base/win/shortcut.h" 31 #include "base/win/shortcut.h"
33 #include "base/win/windows_version.h" 32 #include "base/win/windows_version.h"
34 #endif 33 #endif
35 34
36 using content::BrowserThread; 35 using content::BrowserThread;
37 using content::NavigationController; 36 using content::NavigationController;
38 using content::WebContents; 37 using content::WebContents;
39 38
40 namespace { 39 namespace {
41 40
42 #if defined(OS_WIN) 41 #if defined(OS_WIN)
43 // UpdateShortcutWorker holds all context data needed for update shortcut. 42 // UpdateShortcutWorker holds all context data needed for update shortcut.
44 // It schedules a pre-update check to find all shortcuts that needs to be 43 // It schedules a pre-update check to find all shortcuts that needs to be
45 // updated. If there are such shortcuts, it schedules icon download and 44 // updated. If there are such shortcuts, it schedules icon download and
46 // update them when icons are downloaded. It observes TAB_CLOSING notification 45 // update them when icons are downloaded. It observes TAB_CLOSING notification
47 // and cancels all the work when the underlying tab is closing. 46 // and cancels all the work when the underlying tab is closing.
48 class UpdateShortcutWorker : public content::NotificationObserver, 47 class UpdateShortcutWorker : public content::NotificationObserver,
49 public FaviconDownloadHelperDelegate { 48 public content::FaviconDownloadDelegate {
50 public: 49 public:
51 explicit UpdateShortcutWorker(WebContents* web_contents); 50 explicit UpdateShortcutWorker(WebContents* web_contents);
52 51
53 void Run(); 52 void Run();
54 53
55 private: 54 private:
56 // Overridden from content::NotificationObserver: 55 // Overridden from content::NotificationObserver:
57 virtual void Observe(int type, 56 virtual void Observe(int type,
58 const content::NotificationSource& source, 57 const content::NotificationSource& source,
59 const content::NotificationDetails& details); 58 const content::NotificationDetails& details);
60 59
61 // Downloads icon via the FaviconTabHelper. 60 // Downloads icon via the FaviconTabHelper.
62 void DownloadIcon(); 61 void DownloadIcon();
63 62
64 // FaviconDownloadHelperDelegate override. 63 // content::WebContentsDelegate override.
jam 2012/11/27 01:16:31 nit: content::FaviconDownloadDelegate
Cait (Slow) 2012/11/28 00:11:45 Done.
65 virtual void OnDidDownloadFavicon( 64 virtual void DidDownloadFavicon(
66 int id, 65 int id,
67 const GURL& image_url, 66 const GURL& image_url,
68 bool errored, 67 bool errored,
69 int requested_size, 68 int requested_size,
70 const std::vector<SkBitmap>& bitmaps) OVERRIDE; 69 const std::vector<SkBitmap>& bitmaps) OVERRIDE;
71 70
72 // Checks if shortcuts exists on desktop, start menu and quick launch. 71 // Checks if shortcuts exists on desktop, start menu and quick launch.
73 void CheckExistingShortcuts(); 72 void CheckExistingShortcuts();
74 73
75 // Update shortcut files and icons. 74 // Update shortcut files and icons.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 extensions::TabHelper::FromWebContents(web_contents); 113 extensions::TabHelper::FromWebContents(web_contents);
115 web_app::GetShortcutInfoForTab(web_contents_, &shortcut_info_); 114 web_app::GetShortcutInfoForTab(web_contents_, &shortcut_info_);
116 web_app::GetIconsInfo(extensions_tab_helper->web_app_info(), 115 web_app::GetIconsInfo(extensions_tab_helper->web_app_info(),
117 &unprocessed_icons_); 116 &unprocessed_icons_);
118 file_name_ = web_app::internals::GetSanitizedFileName(shortcut_info_.title); 117 file_name_ = web_app::internals::GetSanitizedFileName(shortcut_info_.title);
119 118
120 registrar_.Add( 119 registrar_.Add(
121 this, 120 this,
122 chrome::NOTIFICATION_TAB_CLOSING, 121 chrome::NOTIFICATION_TAB_CLOSING,
123 content::Source<NavigationController>(&web_contents->GetController())); 122 content::Source<NavigationController>(&web_contents->GetController()));
123 web_contents_->RegisterFaviconDelegate(this);
124 } 124 }
125 125
126 void UpdateShortcutWorker::Run() { 126 void UpdateShortcutWorker::Run() {
127 // Starting by downloading app icon. 127 // Starting by downloading app icon.
128 DownloadIcon(); 128 DownloadIcon();
129 } 129 }
130 130
131 void UpdateShortcutWorker::Observe( 131 void UpdateShortcutWorker::Observe(
132 int type, 132 int type,
133 const content::NotificationSource& source, 133 const content::NotificationSource& source,
(...skipping 15 matching lines...) Expand all
149 DeleteMe(); // We are done if underlying WebContents is gone. 149 DeleteMe(); // We are done if underlying WebContents is gone.
150 return; 150 return;
151 } 151 }
152 152
153 if (unprocessed_icons_.empty()) { 153 if (unprocessed_icons_.empty()) {
154 // No app icon. Just use the favicon from WebContents. 154 // No app icon. Just use the favicon from WebContents.
155 UpdateShortcuts(); 155 UpdateShortcuts();
156 return; 156 return;
157 } 157 }
158 158
159 scoped_ptr<FaviconDownloadHelper> download_helper( 159 web_contents_->DownloadFavicon(unprocessed_icons_.back().url,
160 new FaviconDownloadHelper(web_contents_, this)); 160 std::max(unprocessed_icons_.back().width,
161 161 unprocessed_icons_.back().height));
162 download_helper->DownloadFavicon(unprocessed_icons_.back().url,
163 std::max(unprocessed_icons_.back().width,
164 unprocessed_icons_.back().height));
165 unprocessed_icons_.pop_back(); 162 unprocessed_icons_.pop_back();
166 } 163 }
167 164
168 void UpdateShortcutWorker::OnDidDownloadFavicon( 165 void UpdateShortcutWorker::DidDownloadFavicon(
169 int id, 166 int id,
170 const GURL& image_url, 167 const GURL& image_url,
171 bool errored, 168 bool errored,
172 int requested_size, 169 int requested_size,
173 const std::vector<SkBitmap>& bitmaps) { 170 const std::vector<SkBitmap>& bitmaps) {
174 if (web_contents_ == NULL) { 171 if (web_contents_ == NULL) {
175 DeleteMe(); // We are done if underlying WebContents is gone. 172 DeleteMe(); // We are done if underlying WebContents is gone.
jam 2012/11/27 01:16:31 this can't happen anymore right?
Cait (Slow) 2012/11/28 00:11:45 Done.
176 return; 173 return;
177 } 174 }
178 175
179 std::vector<ui::ScaleFactor> scale_factors; 176 std::vector<ui::ScaleFactor> scale_factors;
180 scale_factors.push_back(ui::SCALE_FACTOR_100P); 177 scale_factors.push_back(ui::SCALE_FACTOR_100P);
181 178
182 size_t closest_index = 179 size_t closest_index =
183 FaviconUtil::SelectBestFaviconFromBitmaps(bitmaps, 180 FaviconUtil::SelectBestFaviconFromBitmaps(bitmaps,
184 scale_factors, 181 scale_factors,
185 requested_size); 182 requested_size);
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 344
348 void UpdateShortcutForTabContents(WebContents* web_contents) { 345 void UpdateShortcutForTabContents(WebContents* web_contents) {
349 #if defined(OS_WIN) 346 #if defined(OS_WIN)
350 // UpdateShortcutWorker will delete itself when it's done. 347 // UpdateShortcutWorker will delete itself when it's done.
351 UpdateShortcutWorker* worker = new UpdateShortcutWorker(web_contents); 348 UpdateShortcutWorker* worker = new UpdateShortcutWorker(web_contents);
352 worker->Run(); 349 worker->Run();
353 #endif // defined(OS_WIN) 350 #endif // defined(OS_WIN)
354 } 351 }
355 352
356 } // namespace web_app 353 } // namespace web_app
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698