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

Side by Side Diff: chrome/browser/web_applications/web_app.cc

Issue 231673005: Move ShortcutInfo, ShortcutLocations from ShellIntegration to web_app. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Windws Created 6 years, 8 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 | 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/web_applications/web_app.h" 5 #include "chrome/browser/web_applications/web_app.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/i18n/file_util_icu.h" 10 #include "base/i18n/file_util_icu.h"
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 59
60 #if defined(TOOLKIT_VIEWS) 60 #if defined(TOOLKIT_VIEWS)
61 // Predicator for sorting images from largest to smallest. 61 // Predicator for sorting images from largest to smallest.
62 bool IconPrecedes(const WebApplicationInfo::IconInfo& left, 62 bool IconPrecedes(const WebApplicationInfo::IconInfo& left,
63 const WebApplicationInfo::IconInfo& right) { 63 const WebApplicationInfo::IconInfo& right) {
64 return left.width < right.width; 64 return left.width < right.width;
65 } 65 }
66 #endif 66 #endif
67 67
68 void DeleteShortcutsOnFileThread( 68 void DeleteShortcutsOnFileThread(
69 const ShellIntegration::ShortcutInfo& shortcut_info) { 69 const web_app::ShortcutInfo& shortcut_info) {
70 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 70 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
71 71
72 base::FilePath shortcut_data_dir = web_app::GetWebAppDataDirectory( 72 base::FilePath shortcut_data_dir = web_app::GetWebAppDataDirectory(
73 shortcut_info.profile_path, shortcut_info.extension_id, GURL()); 73 shortcut_info.profile_path, shortcut_info.extension_id, GURL());
74 return web_app::internals::DeletePlatformShortcuts( 74 return web_app::internals::DeletePlatformShortcuts(
75 shortcut_data_dir, shortcut_info); 75 shortcut_data_dir, shortcut_info);
76 } 76 }
77 77
78 void UpdateShortcutsOnFileThread( 78 void UpdateShortcutsOnFileThread(
79 const base::string16& old_app_title, 79 const base::string16& old_app_title,
80 const ShellIntegration::ShortcutInfo& shortcut_info) { 80 const web_app::ShortcutInfo& shortcut_info) {
81 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 81 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
82 82
83 base::FilePath shortcut_data_dir = web_app::GetWebAppDataDirectory( 83 base::FilePath shortcut_data_dir = web_app::GetWebAppDataDirectory(
84 shortcut_info.profile_path, shortcut_info.extension_id, GURL()); 84 shortcut_info.profile_path, shortcut_info.extension_id, GURL());
85 return web_app::internals::UpdatePlatformShortcuts( 85 return web_app::internals::UpdatePlatformShortcuts(
86 shortcut_data_dir, old_app_title, shortcut_info); 86 shortcut_data_dir, old_app_title, shortcut_info);
87 } 87 }
88 88
89 void UpdateAllShortcutsForShortcutInfo( 89 void UpdateAllShortcutsForShortcutInfo(
90 const base::string16& old_app_title, 90 const base::string16& old_app_title,
91 const ShellIntegration::ShortcutInfo& shortcut_info) { 91 const web_app::ShortcutInfo& shortcut_info) {
92 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 92 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
93 93
94 BrowserThread::PostTask( 94 BrowserThread::PostTask(
95 BrowserThread::FILE, 95 BrowserThread::FILE,
96 FROM_HERE, 96 FROM_HERE,
97 base::Bind(&UpdateShortcutsOnFileThread, old_app_title, shortcut_info)); 97 base::Bind(&UpdateShortcutsOnFileThread, old_app_title, shortcut_info));
98 } 98 }
99 99
100 void OnImageLoaded(ShellIntegration::ShortcutInfo shortcut_info, 100 void OnImageLoaded(web_app::ShortcutInfo shortcut_info,
101 web_app::ShortcutInfoCallback callback, 101 web_app::ShortcutInfoCallback callback,
102 const gfx::ImageFamily& image_family) { 102 const gfx::ImageFamily& image_family) {
103 // If the image failed to load (e.g. if the resource being loaded was empty) 103 // If the image failed to load (e.g. if the resource being loaded was empty)
104 // use the standard application icon. 104 // use the standard application icon.
105 if (image_family.empty()) { 105 if (image_family.empty()) {
106 gfx::Image default_icon = 106 gfx::Image default_icon =
107 ResourceBundle::GetSharedInstance().GetImageNamed(IDR_APP_DEFAULT_ICON); 107 ResourceBundle::GetSharedInstance().GetImageNamed(IDR_APP_DEFAULT_ICON);
108 int size = kDesiredSizes[kNumDesiredSizes - 1]; 108 int size = kDesiredSizes[kNumDesiredSizes - 1];
109 SkBitmap bmp = skia::ImageOperations::Resize( 109 SkBitmap bmp = skia::ImageOperations::Resize(
110 *default_icon.ToSkBitmap(), skia::ImageOperations::RESIZE_BEST, 110 *default_icon.ToSkBitmap(), skia::ImageOperations::RESIZE_BEST,
(...skipping 29 matching lines...) Expand all
140 base::string16 file_name = name; 140 base::string16 file_name = name;
141 #else 141 #else
142 std::string file_name = base::UTF16ToUTF8(name); 142 std::string file_name = base::UTF16ToUTF8(name);
143 #endif 143 #endif
144 file_util::ReplaceIllegalCharactersInPath(&file_name, '_'); 144 file_util::ReplaceIllegalCharactersInPath(&file_name, '_');
145 return base::FilePath(file_name); 145 return base::FilePath(file_name);
146 } 146 }
147 147
148 bool CreateShortcutsOnFileThread( 148 bool CreateShortcutsOnFileThread(
149 ShortcutCreationReason reason, 149 ShortcutCreationReason reason,
150 const ShellIntegration::ShortcutLocations& locations, 150 const web_app::ShortcutLocations& locations,
151 const ShellIntegration::ShortcutInfo& shortcut_info) { 151 const web_app::ShortcutInfo& shortcut_info) {
152 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE)); 152 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::FILE));
153 153
154 base::FilePath shortcut_data_dir = GetWebAppDataDirectory( 154 base::FilePath shortcut_data_dir = GetWebAppDataDirectory(
155 shortcut_info.profile_path, shortcut_info.extension_id, 155 shortcut_info.profile_path, shortcut_info.extension_id,
156 shortcut_info.url); 156 shortcut_info.url);
157 return internals::CreatePlatformShortcuts( 157 return internals::CreatePlatformShortcuts(
158 shortcut_data_dir, shortcut_info, locations, reason); 158 shortcut_data_dir, shortcut_info, locations, reason);
159 } 159 }
160 160
161 } // namespace internals 161 } // namespace internals
162 162
163 web_app::ShortcutInfo::ShortcutInfo()
164 : is_platform_app(false) {
165 }
166
167 web_app::ShortcutInfo::~ShortcutInfo() {}
168
169 web_app::ShortcutLocations::ShortcutLocations()
170 : on_desktop(false),
171 applications_menu_location(APP_MENU_LOCATION_NONE),
172 in_quick_launch_bar(false)
173 #if defined(OS_POSIX)
174 , hidden(false)
175 #endif
176 {
177 }
178
163 void GetShortcutInfoForTab(content::WebContents* web_contents, 179 void GetShortcutInfoForTab(content::WebContents* web_contents,
164 ShellIntegration::ShortcutInfo* info) { 180 web_app::ShortcutInfo* info) {
165 DCHECK(info); // Must provide a valid info. 181 DCHECK(info); // Must provide a valid info.
166 182
167 const FaviconTabHelper* favicon_tab_helper = 183 const FaviconTabHelper* favicon_tab_helper =
168 FaviconTabHelper::FromWebContents(web_contents); 184 FaviconTabHelper::FromWebContents(web_contents);
169 const extensions::TabHelper* extensions_tab_helper = 185 const extensions::TabHelper* extensions_tab_helper =
170 extensions::TabHelper::FromWebContents(web_contents); 186 extensions::TabHelper::FromWebContents(web_contents);
171 const WebApplicationInfo& app_info = extensions_tab_helper->web_app_info(); 187 const WebApplicationInfo& app_info = extensions_tab_helper->web_app_info();
172 188
173 info->url = app_info.app_url.is_empty() ? web_contents->GetURL() : 189 info->url = app_info.app_url.is_empty() ? web_contents->GetURL() :
174 app_info.app_url; 190 app_info.app_url;
175 info->title = app_info.title.empty() ? 191 info->title = app_info.title.empty() ?
176 (web_contents->GetTitle().empty() ? base::UTF8ToUTF16(info->url.spec()) : 192 (web_contents->GetTitle().empty() ? base::UTF8ToUTF16(info->url.spec()) :
177 web_contents->GetTitle()) : 193 web_contents->GetTitle()) :
178 app_info.title; 194 app_info.title;
179 info->description = app_info.description; 195 info->description = app_info.description;
180 info->favicon.Add(favicon_tab_helper->GetFavicon()); 196 info->favicon.Add(favicon_tab_helper->GetFavicon());
181 197
182 Profile* profile = 198 Profile* profile =
183 Profile::FromBrowserContext(web_contents->GetBrowserContext()); 199 Profile::FromBrowserContext(web_contents->GetBrowserContext());
184 info->profile_path = profile->GetPath(); 200 info->profile_path = profile->GetPath();
185 } 201 }
186 202
187 #if !defined(OS_WIN) 203 #if !defined(OS_WIN)
188 void UpdateShortcutForTabContents(content::WebContents* web_contents) {} 204 void UpdateShortcutForTabContents(content::WebContents* web_contents) {}
189 #endif 205 #endif
190 206
191 ShellIntegration::ShortcutInfo ShortcutInfoForExtensionAndProfile( 207 web_app::ShortcutInfo ShortcutInfoForExtensionAndProfile(
192 const extensions::Extension* app, Profile* profile) { 208 const extensions::Extension* app, Profile* profile) {
193 ShellIntegration::ShortcutInfo shortcut_info; 209 web_app::ShortcutInfo shortcut_info;
194 shortcut_info.extension_id = app->id(); 210 shortcut_info.extension_id = app->id();
195 shortcut_info.is_platform_app = app->is_platform_app(); 211 shortcut_info.is_platform_app = app->is_platform_app();
196 shortcut_info.url = extensions::AppLaunchInfo::GetLaunchWebURL(app); 212 shortcut_info.url = extensions::AppLaunchInfo::GetLaunchWebURL(app);
197 shortcut_info.title = base::UTF8ToUTF16(app->name()); 213 shortcut_info.title = base::UTF8ToUTF16(app->name());
198 shortcut_info.description = base::UTF8ToUTF16(app->description()); 214 shortcut_info.description = base::UTF8ToUTF16(app->description());
199 shortcut_info.extension_path = app->path(); 215 shortcut_info.extension_path = app->path();
200 shortcut_info.profile_path = profile->GetPath(); 216 shortcut_info.profile_path = profile->GetPath();
201 shortcut_info.profile_name = 217 shortcut_info.profile_name =
202 profile->GetPrefs()->GetString(prefs::kProfileName); 218 profile->GetPrefs()->GetString(prefs::kProfileName);
203 return shortcut_info; 219 return shortcut_info;
204 } 220 }
205 221
206 void UpdateShortcutInfoAndIconForApp( 222 void UpdateShortcutInfoAndIconForApp(
207 const extensions::Extension* extension, 223 const extensions::Extension* extension,
208 Profile* profile, 224 Profile* profile,
209 const web_app::ShortcutInfoCallback& callback) { 225 const web_app::ShortcutInfoCallback& callback) {
210 ShellIntegration::ShortcutInfo shortcut_info = 226 web_app::ShortcutInfo shortcut_info =
211 ShortcutInfoForExtensionAndProfile(extension, profile); 227 ShortcutInfoForExtensionAndProfile(extension, profile);
212 228
213 std::vector<extensions::ImageLoader::ImageRepresentation> info_list; 229 std::vector<extensions::ImageLoader::ImageRepresentation> info_list;
214 for (size_t i = 0; i < kNumDesiredSizes; ++i) { 230 for (size_t i = 0; i < kNumDesiredSizes; ++i) {
215 int size = kDesiredSizes[i]; 231 int size = kDesiredSizes[i];
216 extensions::ExtensionResource resource = 232 extensions::ExtensionResource resource =
217 extensions::IconsInfo::GetIconResource( 233 extensions::IconsInfo::GetIconResource(
218 extension, size, ExtensionIconSet::MATCH_EXACTLY); 234 extension, size, ExtensionIconSet::MATCH_EXACTLY);
219 if (!resource.empty()) { 235 if (!resource.empty()) {
220 info_list.push_back(extensions::ImageLoader::ImageRepresentation( 236 info_list.push_back(extensions::ImageLoader::ImageRepresentation(
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 300
285 base::FilePath GetWebAppDataDirectory(const base::FilePath& profile_path, 301 base::FilePath GetWebAppDataDirectory(const base::FilePath& profile_path,
286 const extensions::Extension& extension) { 302 const extensions::Extension& extension) {
287 return GetWebAppDataDirectory( 303 return GetWebAppDataDirectory(
288 profile_path, 304 profile_path,
289 extension.id(), 305 extension.id(),
290 GURL(extensions::AppLaunchInfo::GetLaunchWebURL(&extension))); 306 GURL(extensions::AppLaunchInfo::GetLaunchWebURL(&extension)));
291 } 307 }
292 308
293 std::string GenerateApplicationNameFromInfo( 309 std::string GenerateApplicationNameFromInfo(
294 const ShellIntegration::ShortcutInfo& shortcut_info) { 310 const web_app::ShortcutInfo& shortcut_info) {
295 if (!shortcut_info.extension_id.empty()) { 311 if (!shortcut_info.extension_id.empty()) {
296 return web_app::GenerateApplicationNameFromExtensionId( 312 return web_app::GenerateApplicationNameFromExtensionId(
297 shortcut_info.extension_id); 313 shortcut_info.extension_id);
298 } else { 314 } else {
299 return web_app::GenerateApplicationNameFromURL( 315 return web_app::GenerateApplicationNameFromURL(
300 shortcut_info.url); 316 shortcut_info.url);
301 } 317 }
302 } 318 }
303 319
304 std::string GenerateApplicationNameFromURL(const GURL& url) { 320 std::string GenerateApplicationNameFromURL(const GURL& url) {
(...skipping 12 matching lines...) Expand all
317 333
318 std::string GetExtensionIdFromApplicationName(const std::string& app_name) { 334 std::string GetExtensionIdFromApplicationName(const std::string& app_name) {
319 std::string prefix(kCrxAppPrefix); 335 std::string prefix(kCrxAppPrefix);
320 if (app_name.substr(0, prefix.length()) != prefix) 336 if (app_name.substr(0, prefix.length()) != prefix)
321 return std::string(); 337 return std::string();
322 return app_name.substr(prefix.length()); 338 return app_name.substr(prefix.length());
323 } 339 }
324 340
325 void CreateShortcutsForShortcutInfo( 341 void CreateShortcutsForShortcutInfo(
326 web_app::ShortcutCreationReason reason, 342 web_app::ShortcutCreationReason reason,
327 const ShellIntegration::ShortcutLocations& locations, 343 const web_app::ShortcutLocations& locations,
328 const ShellIntegration::ShortcutInfo& shortcut_info) { 344 const web_app::ShortcutInfo& shortcut_info) {
329 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 345 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
330 346
331 BrowserThread::PostTask( 347 BrowserThread::PostTask(
332 BrowserThread::FILE, 348 BrowserThread::FILE,
333 FROM_HERE, 349 FROM_HERE,
334 base::Bind( 350 base::Bind(
335 base::IgnoreResult(&web_app::internals::CreateShortcutsOnFileThread), 351 base::IgnoreResult(&web_app::internals::CreateShortcutsOnFileThread),
336 reason, locations, shortcut_info)); 352 reason, locations, shortcut_info));
337 } 353 }
338 354
339 void CreateShortcuts( 355 void CreateShortcuts(
340 ShortcutCreationReason reason, 356 ShortcutCreationReason reason,
341 const ShellIntegration::ShortcutLocations& locations, 357 const web_app::ShortcutLocations& locations,
342 Profile* profile, 358 Profile* profile,
343 const extensions::Extension* app) { 359 const extensions::Extension* app) {
344 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 360 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
345 361
346 web_app::UpdateShortcutInfoAndIconForApp( 362 web_app::UpdateShortcutInfoAndIconForApp(
347 app, 363 app,
348 profile, 364 profile,
349 base::Bind(&CreateShortcutsForShortcutInfo, reason, locations)); 365 base::Bind(&CreateShortcutsForShortcutInfo, reason, locations));
350 } 366 }
351 367
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
407 423
408 #if defined(OS_LINUX) 424 #if defined(OS_LINUX)
409 std::string GetWMClassFromAppName(std::string app_name) { 425 std::string GetWMClassFromAppName(std::string app_name) {
410 file_util::ReplaceIllegalCharactersInPath(&app_name, '_'); 426 file_util::ReplaceIllegalCharactersInPath(&app_name, '_');
411 base::TrimString(app_name, "_", &app_name); 427 base::TrimString(app_name, "_", &app_name);
412 return app_name; 428 return app_name;
413 } 429 }
414 #endif 430 #endif
415 431
416 } // namespace web_app 432 } // namespace web_app
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698